我目前遇到了一個昂貴的SQL查詢的性能問題,我想改進它。提高SQL查詢的性能
這是查詢的樣子:
SELECT TOP 50 MovieID
FROM (SELECT [MovieID], COUNT(*) AS c
FROM [tblMovieTags]
WHERE [TagID] IN (SELECT TOP 7 [TagID]
FROM [tblMovieTags]
WHERE [MovieID]=12345
ORDER BY Relevance ASC)
GROUP BY [MovieID]
HAVING COUNT(*) > 1) a
INNER JOIN [tblMovies] m ON m.MovieID=a.MovieID
WHERE (Hidden=0) AND m.Active=1 AND m.Processed=1
ORDER BY c DESC, m.IMDB DESC
我試圖找到至少有2個MovieID 12345
數據庫基本方案匹配的標籤的電影看起來像:
每部電影都有4到5個標籤。我想要一個基於標籤的電影列表。最少2個標籤必須匹配。
此查詢導致我的服務器問題,因爲在任何給定時間我有數百個併發用戶。
我已經根據執行計劃的建議創建了索引,這使得它更快,但它還不夠。
有什麼我可以做的,使這個更快?
你應該像這樣緩存半不可變的東西。 –
建議1 - 永遠不要使用count(*)總是使用count(some_key) –
也許http://msdn.microsoft.com/en-us/library/dd171921%28SQL.100%29.aspx – Mihai