【发布时间】:2010-07-01 23:17:35
【问题描述】:
在 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')
=> 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 在一起时查询速度会降低一个数量级?
【问题讨论】:
-
WHERE FirstNames Like '%Bob%' OR LastNames Like '%Bob%'的效果如何? -
大约 2 秒(我正在与他合作)
标签: sql sql-server performance