在存储过程中的SQL Server 2008R2针对的ItemData表运行以下查询:如何保持以下TSQL查询从100%运行我的服务器?
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))
根据查询使用或者CONTAINS
或FREETEXT
数据。
随着加载此查询运行速度非常慢,窥探100%的服务器。
我已经设置了以下指标:
什么我必须这样做这些查询停止运行这么热?
谢谢。
- UPDATE -
该表具有对标题和说明一个簇索引仅包含ItemListID的,和FTS。
我添加了一个非聚集索引(在标识名称不正确地命名)如下:
好吧,我应该删除当前的索引(PK除外),然后添加一个包含您提到的字段的非聚集索引?你提到使用CONTAINS很贵(Title),但是我已经在Title和Description上创建了一个全文索引(后者我目前没有用于我的查询)。我注意到我的物业没有时间表 - 我是否需要添加一些自动填充时间表? – ElHaix 2012-08-09 13:47:07
我不能说你应该删除任何索引而不理解系统的其他部分如何与数据库交互。但是,您可以使用Glenn Berry的一些精彩查询来帮助您调整索引。 https://sqlserverperformance.wordpress.com/tag/dmv-queries/ – 2012-08-09 13:50:08
至于全文搜索,真棒!那么就我所知,没有什么需要你做的了。 – 2012-08-09 13:51:36