And*_*ong 11 sql sql-server performance
在SQL Server(2008年),我有两列的全文索引,给他们打电话Table1.FirstNames
和Table2.LastNames
.在分析了一些查询之后,我想出了以下结果:
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob') OR CONTAINS(LastNames, 'Bob')
Run Code Online (Sandbox Code Playgroud)
=> 31 197ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE (FirstNames LIKE '%Bob%') OR CONTAINS(LastNames, 'Bob')
Run Code Online (Sandbox Code Playgroud)
=> 1941ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob') OR LastNames LIKE '%Bob%'
Run Code Online (Sandbox Code Playgroud)
=> 3201ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob')
Run Code Online (Sandbox Code Playgroud)
=> 565ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE FirstNames LIKE '%Bob%'
Run Code Online (Sandbox Code Playgroud)
=> 670毫秒
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(LastNames, 'Bob')
Run Code Online (Sandbox Code Playgroud)
=> 17ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE LastNames LIKE '%Bob%'
Run Code Online (Sandbox Code Playgroud)
=> 3ms
即使我重建FullText索引,此行为仍然存在.
对于特定语言的大型数据集,FullText通常比LIKE查询快得多,但为什么当我将两个FullText clasues合并在一起时,查询速度会减慢一个数量级?
是否改为使用ContainsTable
帮助?
它在这里做了添加更多OR搜索与CONTAINS带来查询到抓取
而同样的回答者(乔·斯特凡内利)管理的改变带来了类似的改进FREETEXT
谓词联合OR
到FREETEXTTABLE
这里跨多个表的SQL Server全文查询-为什么这么慢?
归档时间: |
|
查看次数: |
2002 次 |
最近记录: |