以下查询在 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) )
根据查询使用的数据CONTAINS
或FREETEXT
。
在负载情况下,此查询运行速度非常慢,并且以 100% 的速度查看服务器。
我设置了以下索引:
我需要怎么做才能使这些查询停止运行这么热?
谢谢。
- 更新 -
该表有一个仅由 ItemListID 和标题和描述上的 FTS 组成的聚集索引。
我添加了一个非聚集索引(在身份名称中错误地命名),如下所示: