我有一個大約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將有助於加快速度。 –
你能告訴我們**這些表上有哪些索引**? –