我目前遇到了一个昂贵的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