Sql-Server
如何優化和加快查詢
以下查詢永遠不會完成並執行超過 14 小時:
SELECT U.Age, U.CreationDate, U.DisplayName, P.AcceptedAnswerId, P.ClosedDate, p .Title, P.ViewCount, C.CreationDate,C.Score ,C.UserId FROM dbo.Users As U LEFT JOIN dbo.Posts As P on U.id = P.id LEFT JOIN dbo.Comments As C on U.id =C.id WHERE ( U.Location = 'India' OR U.Location ='United Kingdom' ) AND U.LastAccessDate>= '04/02/2018' AND U.LastAccessDate< '06/02/2018' AND P.LastActivityDate>= '04/02/2018' AND P.LastActivityDate< '06/02/2018' AND U.LastAccessDate>= '04/02/2018' AND U.LastAccessDate< '06/02/2018' AND U.Age>10 AND U.Age is NOT NULL
我怎樣才能改進和加快它?
我看到的最大問題是你的加入。您正在將使用者的“id”加入文章和評論的“id”。這基本上是說,獲取使用者中的每條記錄並將其加入文章中的每條記錄,然後將其加入評論中的每條記錄。
假設 UserID 作為 Posts 和 Comments 中的外鍵存在,下面的程式碼應該可以工作。如果沒有,您需要確定
JOIN
語句的正確外鍵。SELECT U.Age, U.CreationDate, U.DisplayName, P.AcceptedAnswerId, P.ClosedDate, P.Title, P.ViewCount, C.CreationDate, C.Score, C.UserId FROM dbo.Users AS U LEFT OUTER JOIN dbo.Posts AS P ON U.UserID = P.UserID LEFT OUTER JOIN dbo.Comments AS C ON U.UserID = C.UserID WHERE U.Location IN ('India','United Kingdom') AND U.LastAccessDate>= '04/02/2018' AND U.LastAccessDate< '06/02/2018' AND P.LastActivityDate>= '04/02/2018' AND P.LastActivityDate< '06/02/2018' AND U.Age>10
我
OR
用IN
.我刪除了重複的
U.LastAccessDate
條件。我刪除了不必要的
U.Age IS NOT NULL
條件。如果此查詢仍然執行緩慢。我的下一個最佳猜測是 Users.LastAccessDate 和/或 Posts.LastActivityDate 上缺少索引。