【发布时间】:2012-08-09 00:34:07
【问题描述】:
以下查询在 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 以及 Title 和 Description 上的 FTS 组成。
我添加了一个非聚集索引(在身份名称中命名错误)如下:
【问题讨论】:
标签: tsql sql-server-2008-r2 query-optimization