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秒。
有没有什么方法可以更快地优化此查询?
答案 0 :(得分:1)
这是&lt;&gt;的性质查询,它们相对较慢。由于您使用的是存储过程,因此可能不会限制将其写入单个查询。您可以使用临时表来获取特定用户ID的较小IP列表,较小表上的不等于查询可能比在线使用的查询更有效,其中包括所有内容中的所有内容。离开加入。