具有附加条件的Sql server全文搜索性能

时间:2013-09-23 13:12:26

标签: sql sql-server database full-text-search

我们遇到SQL Server(2008 R2)全文搜索的性能问题。当我们在全文搜索条件中有其他条件时,它会变得太慢。

这是我的简化查询:

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

调用表的主键是CallId(int,clustered index)以及CallTime索引的Calls表。我们有16.000.000行,CustomerText每行大约10KB。

当我看到执行计划时,首先找到全文搜索结果集,然后通过CallId与Calls表连接。因此,如果第一个结果集有更多行,则查询会变慢(超过一分钟)。

这是执行计划:

This is the execution plan

当我单独运行条件时,它会为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")')

那么,我该怎么做才能提高查询的效果呢?

1 个答案:

答案 0 :(得分: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)

比比较日期更快。