【发布时间】:2012-11-20 01:42:12
【问题描述】:
我有一个包含大约 100 万条记录的表(运行 SQL Server 2008 Web)。我有一个搜索例程,它试图匹配产品代码和产品描述。 但是在某些情况下它非常慢。下面是(删减)sql语句:
WITH AllProducts AS (
SELECT p.*, Row_Number() OVER (ORDER BY ProductId) AS RowNumber
FROM Product AS p
WHERE p.IsEnabled=1 AND
(
p.BaseSku = 'KPK-3020QWC-C' -- this on its own is fast
OR
CONTAINS(p.FreeTextStrings, '"KPK-3020QWC*"') -- and this on its own is fast, but not both
)
) SELECT * FROM AllProducts
WHERE RowNumber BETWEEN 1 AND 20;
请注意,如果我只是比较 [p.BaseSku = 'KPK-3020QWC-C'] 或 [CONTAINS(p.FreeTextStrings, '"KPK-3020QWC*"')] 单独(但不是两者)它的瞬间。如果我将它们比较在一起,则需要很长时间(几分钟)-并且只返回一行。
IsEnabled 和 BaseSku 被索引,FreeTextStrings 被 FTS 索引。
我记得这之前工作得很好。
任何人都可以对此有所了解并提出一些解决方案吗?
执行计划文件可在此处获得:http://wiki.webgear.co.nz/GetFile.aspx?File=Temp%5cSearch%20Test.sqlplan.zip
【问题讨论】:
-
您能否向我们展示一下您的 SQL Server 的执行计划?
-
SQL 2005 升级到 SQL 2008 后开始出现这些问题。
标签: sql sql-server