当前位置: 代码迷 >> Sql Server >> 登录过程 全表扫描解决办法
  详细解决方案

登录过程 全表扫描解决办法

热度:101   发布时间:2016-04-27 15:32:27.0
登录过程 全表扫描
我写了一个存储过程登录,如下:
SET   NOCOUNT   ON
GO
CREATE   PROCEDURE   UserLogin
@FLAG   INT   OUTPUT,--返回用户登录的状态
@UserName   NVARCHAR(50),
@Password   NVARCHAR(50)
AS
DECLARE   @Lock   BIT,@TempPass   NVARCHAR(50),@UserID   INT
IF   EXISTS(SELECT   top   1   UserName   FROM   Users   WHERE   [email protected])
  BEGIN
    SELECT   top   1   @Lock=Lock,@UserID=UserID   FROM   Users   WHERE   [email protected]
    IF   @Lock=0
    BEGIN
      SELECT   top   1   @TempPass=Password   FROM   Users   WHERE   [email protected]
      IF   @[email protected]
    BEGIN
      SET   @FLAG=1   --用户登录成功
    END
    ELSE
    BEGIN
      SET   @FLAG=2   --用户密码错误
    END
  END
  ELSE
  BEGIN
    SET   @FLAG=3   --用户被锁定
  END
END
ELSE
BEGIN
SET   @FLAG=4   --不存在该用户
END
GO
SET   NOCOUNT   OFF

用户表中的数据大概是170万条
其中     UserID是聚集索引,     UserName是非聚集索引
但是系统登录过程中会全表扫描,导致数据的内存占用持续升高,登录时间也比较长
我该怎么修改,能够快速登录?谢谢

------解决方案--------------------
IF EXISTS(SELECT top 1 UserName FROM Users WHERE [email protected])
BEGIN
SELECT top 1 @Lock=Lock,@UserID=UserID FROM Users WHERE [email protected]
IF @Lock=0
BEGIN
SELECT top 1 @TempPass=Password FROM Users WHERE [email protected]

/*
这里等于执行了三次SELECT。
*/
  相关解决方案