2

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")')

那么,我能做些什么来提高我的查询的性能?

4

1 回答 1

0

如果您已经Calls根据他们的调用时间进行了索引和排序,而不是调用:

WHERE (C.CallTime BETWEEN '2013-08-01 00:00:00' AND '2013-08-07 00:00:00')

您可以找到调用时间大于的'2013-08-01 00:00:00'第一个索引和小于'2013-08-07 00:00:00'

你的新条件将是:

WHERE (C.CallTime BETWEEN first_index AND last_index)

这比比较日期要快。

于 2013-09-23T15:28:22.840 回答