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

В 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')

=> 1 941 мс

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

=> 3 201 мс

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 обычно намного быстрее, чем ПОДОБНЫЙ запрос по большим наборам данных на определенном языке, но почему скорости запроса замедляются порядком величины когда я ИЛИ вместе два FullText clasues?

11
задан Andrew Song 1 July 2010 в 23:17
поделиться

3 ответа

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

Это помогло здесь Добавление дополнительных поисковых запросов OR с CONTAINS приводит к сканированию

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

5
ответ дан 3 December 2019 в 11:36
поделиться

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

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

0
ответ дан 3 December 2019 в 11:36
поделиться
0
ответ дан 3 December 2019 в 11:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: