我有一个简单的查询,它依赖于两个全文索引表,但是当我将CONTAINS与任何其他OR搜索结合使用时,它的运行速度非常慢。从执行计划中可以看出,两次全文搜索压垮了性能。如果我只使用 1 个 CONTAINS 进行查询,或者两者都不查询,则查询是亚秒级的,但是当您将OR添加到组合中时,查询将变得命运多舛。
这两张表没有什么特别之处,它们并不太宽(一张有 42 列,另一张有 21 列;每个列中可能有 10 列被 FT 索引),甚至包含非常多的记录(两者中最大的有 36k 条记录)。
我能够通过将两个CONTAINS搜索拆分为它们自己的SELECT查询然后将这三个合并在一起来解决性能问题。这个 UNION 解决方法是我唯一的希望吗?
SELECT a.CollectionID
FROM collections a
INNER JOIN determinations b ON a.CollectionID = b.CollectionID
WHERE a.CollrTeam_Text LIKE '%fa%'
OR CONTAINS(a.*, '"*fa*"')
OR CONTAINS(b.*, '"*fa*"')
执行计划: