如何防止以下TSQL查询以100%的速度运行我的服务器?

如何防止以下TSQL查询以100%的速度运行我的服务器?,tsql,sql-server-2008-r2,query-optimization,Tsql,Sql Server 2008 R2,Query Optimization,以下查询在SQL Server 2008R2中以ItemData表为目标的存储过程中运行: SELECT TOP(500) ItemListID, GeoCity, GeoState, GeoDisplay, Title, Link, Description, CleanDescription, OptimizedDescription, PubDateParsed, ImageBytes, DateAdded FROM ( SELECT TOP(500) ItemListID,

以下查询在SQL Server 2008R2中以ItemData表为目标的存储过程中运行:

SELECT TOP(500) ItemListID, GeoCity, GeoState, GeoDisplay, Title, Link, Description, CleanDescription, OptimizedDescription, PubDateParsed, ImageBytes, DateAdded  FROM  (      SELECT TOP(500) ItemListID, GeoCity, GeoState, GeoDisplay, Title, Link, Description, CleanDescription, OptimizedDescription, PubDateParsed, ImageBytes, DateAdded, ROW_NUMBER()             
       OVER( ORDER BY ItemListID DESC )
       AS RowNumber  
       FROM ItemData  
       WHERE CONTAINS(Title, @FTSSearchTerm  ) -- ' + @OriginalSearchTerm + '"')   
       AND  ( WebsiteID=1 AND 
                                     (@GeoCity = '-1' OR GeoCity = @GeoCity)  AND
                                     (@GeoState = '-1' OR GeoState = @GeoState) )
                   ) ItemData   WHERE RowNumber >= ( @PageNum - 1) * @PageSize + 1   AND RowNumber <= @PageNum * @PageSize ORDER BY ItemListID DESC 

        SELECT @NumberOfResultsReturned = @@ROWCOUNT         

        SELECT @ActualNumberOfResults = COUNT(*) FROM ItemData WHERE CONTAINS(Title, @FTSSearchTerm  ) -- ' + @OriginalSearchTerm + '"')    AND  ( WebsiteID=1 AND       (@GeoCity = '-1' OR GeoCity = @GeoCity)  AND    (@GeoState = '-1' OR GeoState = @GeoState) )
根据查询使用的数据(包含或自由文本)

使用load时,此查询运行非常慢,并以100%的速度查看服务器

我设置了以下索引:

我需要做什么才能让这些查询停止运行

谢谢

-更新-

该表有一个聚集索引,该索引仅由ItemListID和FTS(标题和描述)组成

我在标识名中添加了一个名称不正确的非聚集索引,如下所示:


在没有实际查看执行计划的情况下,您似乎需要一个标题、地理城市、地理状态和网站ID的非聚集索引,包括以下列:ItemListID、GeoDisplay、Link、Description、CleanDescription、OptimizedDescription、PubDateParsed、ImageBytes和DateAdd

这将允许执行计划使用一个非聚集索引,该索引包含您在此查询中查找的所有信息。如果没有它,它将使用您显示的其中一个索引,并且仍然需要转到表以获取您需要的数据

但这并不能完全解决您的问题,这取决于表中的数据量,执行标题上的Contains搜索总是很昂贵的。如果你能利用它来做搜索部分,那将是最好的


希望这有帮助

好的,那么我应该删除PK之外的当前索引,然后添加一个包含您提到的字段的非聚集索引?您提到在Title上使用CONTAINS很昂贵,但我已经在Title上创建了全文索引,并且描述了我目前在查询中没有使用的后者。我注意到它的属性中没有计划-我需要添加一些自动填充计划吗?我不能说在不了解系统其余部分如何与数据库交互的情况下应该删除任何索引。不过,您可以使用Glenn Berry提供的一些很棒的查询来帮助您调整索引。至于全文搜索,太棒了!那么就我所知,在这方面你不需要再做什么了。谢谢。我尝试使用with ItemDataID创建聚集索引。但是,由于我的FTS中包含标题和描述,因此它们不能包含在聚集索引中。那很好。但是,我收到一条警告消息,指出PK上的当前索引需要保持为一列,否则FTS将被禁用。简言之,在您提到的字段上创建聚集索引(不包括PK)可以有效地执行与您建议的相同的操作吗?我建议您创建非聚集索引。此时,我将不使用PK生成的聚集索引。