Почему запросы SQL FullText замедляются, когда вы ИЛИ?

В SQL Server (2008) у меня есть индекс FullText в двух столбцах, назовите их 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')

= > 1941ms

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

= > 3201ms

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%'

= > 3ms

Это поведение сохраняется, даже если я перестрою индекс FullText.

FullText обычно намного быстрее, чем запрос LIKE для больших наборов данных на определенном языке, но почему скорости запросов замедляются на порядок, когда я ИЛИ вместе с двумя кластерами FullText?

Ответ 1

Помогает ли изменение использования ContainsTable?

Он сделал здесь Добавление большего количества запросов OR с помощью CONTAINS Приводит запрос на сканирование

И тому же автору (Joe Stefanelli) удалось добиться аналогичного улучшения, изменив предикаты FREETEXT в сочетании с OR на FREETEXTTABLE здесь Полный текстовый запрос SQL Server для нескольких таблиц - почему так медленно?

Ответ 3

Я бы посмотрел план выполнения для каждого из них. Я предполагаю, что вы узнаете об этом немного.

Вот достойная ссылка, которая покажет вам, как отобразить план выполнения, а также некоторые советы по его интерпретации.