SQL Procedure Ms运行缓慢

时间:2015-10-01 06:31:47

标签: sql-server performance tsql optimization

DECLARE @userId INT = 1001

SELECT 
    , Logins.IP
    , COUNT(LoginsOther.UserId) AS OtherUsersOnThisIp
    , MAX(Logins.DateHappened) AS LastUsed
    , Logins.UserId
FROM Security.UserLogin AS Logins 
LEFT JOIN Security.UserLogin AS LoginsOther 
  ON LoginsOther.IP = Logins.IP 
 AND LoginsOther.UserId <> Logins.UserId 
WHERE Logins.UserId = @userId
GROUP BY 
    , Logins.IP
    , Logins.UserId

所以,我有表UserLogin列:Id int, DateHappened datetime, IP nvarchar, LoginStatusId int, UserId bigint 此表中有17769条记录。 任务是用户使用已使用的IP地址,OtherUsersOnThisIp必须显示使用此IpAddress的其他用户数,当我运行查询时结果计数为22行但需要10-19秒。 有没有什么方法可以更快地优化此查询?

1 个答案:

答案 0 :(得分:1)

这是&lt;&gt;的性质查询,它们相对较慢。由于您使用的是存储过程,因此可能不会限制将其写入单个查询。您可以使用临时表来获取特定用户ID的较小IP列表,较小表上的不等于查询可能比在线使用的查询更有效,其中包括所有内容中的所有内容。离开加入。