SQL Server (2008 R2) 全文搜索存在性能问题。当我们对全文搜索条件有额外的 where 条件时,它变得太慢了。
这是我的简化查询:
SELECT * FROM Calls C
WHERE (C.CallTime BETWEEN '2013-08-01 00:00:00' AND '2013-08-07 00:00:00')
AND CONTAINS(CustomerText, '("efendim")')
Calls 表的主键是 CallId(int,聚集索引),也是 CallTime 索引的 Calls 表。我们有 16.000.000 行,每行 CustomerText 大约 10KB。
当我看到执行计划时,它首先找到全文搜索结果集,然后通过 CallId 与 Calls 表连接。因此,如果第一个结果集有更多行,查询会变慢(超过一分钟)。
这是执行计划:
当我单独运行 where 条件时,它为 CallTime 条件返回 360.000 行:
SELECT COUNT(*) FROM Calls C
WHERE (C.CallTime BETWEEN '2013-08-01 00:00:00' AND '2013-08-07 00:00:00')
和包含条件的 1.200.000 行:
SELECT COUNT(*) FROM Calls C
WHERE CONTAINS(AgentText, '("efendim")')
那么,我能做些什么来提高我的查询的性能?