gpt4 book ai didi

sql - 为什么 SQL 全文查询在执行 OR 时会变慢?

转载 作者:行者123 更新时间:2023-12-02 09:37:51 26 4
gpt4 key购买 nike

在 SQL Server (2008) 中,我在两列上有一个全文索引,将它们称为 Table1.FirstNamesTable2.LastNames。在分析了一些查询后,我得出了以下结果:

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob') OR CONTAINS(LastNames, 'Bob')

=> 31 197 毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE (FirstNames LIKE '%Bob%') OR CONTAINS(LastNames, 'Bob')

=> 1941 毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob') OR LastNames LIKE '%Bob%'

=> 3201 毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob')

=> 565 毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE FirstNames LIKE '%Bob%'

=> 670 毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(LastNames, 'Bob')

=> 17 毫秒

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE LastNames LIKE '%Bob%'

=> 3 毫秒

即使我重建全文索引,此行为仍然存在。

FullText 通常比对特定语言的大量数据进行 LIKE 查询要快得多,但为什么当我将两个 FullText 子句进行 OR 运算时,查询速度会减慢一个数量级?

最佳答案

更改为使用 ContainsTable 有帮助吗?

它在这里Adding more OR searches with CONTAINS Brings Query to Crawl

同一个回答者 ( Joe Stefanelli ) 通过将与 OR 组合的 FREETEXT 谓词更改为 FREETEXTTABLE 成功实现了类似的改进在这里SQL Server full text query across multiple tables - why so slow?

关于sql - 为什么 SQL 全文查询在执行 OR 时会变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3162337/

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