在存儲過程中的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