我有一个大约250000条记录的用户表。我有以下查询(请注意,我是SQL的新手),但执行时间非常长。我检查了执行计划,执行时间的60%正在被2种类型占用。
SELECT TOP 50
Flows_Users.UserName,
Flows_Users.UserID,
Flows_Users.ImageName,
Flows_Users.DisplayName,
Flows_UserBios.bio,
FlowsCount = (
SELECT Count(1)
FROM Flows_Flows
WHERE UserID = Flows_Users.UserID
AND Flows_Flows.Active = '1'
),
BeatsCount = (
SELECT Count(1)
FROM Flows_Beats
WHERE UserName_ID = Flows_Users.UserID
AND Flows_Beats.Active = '1'
),
FollowersCount = (
SELECT Count(1)
FROM Flows_Follow
WHERE FOLLOWING = Flows_Users.UserID
),
FollowingCount = (
SELECT Count(1)
FROM Flows_Follow
WHERE FOLLOWER = Flows_Users.UserID
),
ISNULL(SUM(Flows_Flows_Likes_Dislikes.[Like]), 0) AS Likes,
ISNULL(SUM(Flows_Flows_Likes_Dislikes.Dislike), 0) AS DisLikes
FROM Flows_Users
LEFT JOIN Flows_Flows
ON Flows_Users.UserID = Flows_Flows.UserID
LEFT JOIN Flows_UserBios
ON Flows_Users.UserID = Flows_UserBios.userid
LEFT JOIN Flows_Flows_Likes_Dislikes
ON Flows_Flows.FlowID = Flows_Flows_Likes_Dislikes.FlowID
WHERE Flows_Users.UserID = Flows_Users.UserID
GROUP BY Flows_Users.UserID,
Flows_Users.UserName,
Flows_Users.ImagePath,
Flows_Users.ImageName,
Flows_Users.DisplayName,
Flows_UserBios.bio
ORDER BY
[Likes] DESC,
[Dislikes] ASC,
FlowsCount DESC
我知道这是一团糟,但它只有在成千上万的表中才能完成工作。有什么办法可以让这个更快吗?现在需要5-10分钟才能执行。这也是在存储过程中,我觉得我有需要索引,索引的列。
我的建议。 1.用连接或窗口操作替换子查询,然后2.查看索引。 1.应该帮助你将查询减少到可管理的位,并且2将有助于加快速度。 –
你能告诉我们**这些表上有哪些索引**? –