登录过程 全表扫描
我写了一个存储过程登录,如下:
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 UserName=@UserName)
BEGIN
SELECT top 1 @Lock=Lock,@UserID=UserID FROM Users WHERE UserName=@UserName
IF @Lock=0
BEGIN
SELECT top 1 @TempPass=Password FROM Users WHERE UserID=@UserID
IF @Password=@TempPass
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 UserName=@UserName)
BEGIN
SELECT top 1 @Lock=Lock,@UserID=UserID FROM Users WHERE UserName=@UserName
IF @Lock=0
BEGIN
SELECT top 1 @TempPass=Password FROM Users WHERE UserID=@UserID
/*
这里等于执行了三次SELECT。
*/