gpt4 book ai didi

具有附加条件的 SQL Server 全文搜索性能

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:32 24 4
gpt4 key购买 nike

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, clustered index),也是由CallTime 索引的Calls 表。我们有 16.000.000 行,CustomerText 每行大约 10KB。

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

这是执行计划:

This is the execution plan

当我单独运行 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")')

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

最佳答案

如果您根据调用时间对 调用 进行了索引和排序,而不是调用:

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)

这比比较日期更快。

关于具有附加条件的 SQL Server 全文搜索性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18960163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com