Производительность как '% Query%' по сравнению с полнотекстовым поиском СОДЕРЖИТ запрос - PullRequest
40 голосов
/ 09 июля 2010

У меня есть ситуация, когда я бы хотел найти одно слово .

Для этого сценария, какой запрос был бы хорош с точки зрения производительности?

Select Col1, Col2 from Table Where Col1 Like '%Search%'

или

Select Col1, Col2 from Table Where Col1 CONTAINS(Col1,'Search')

Ответы [ 3 ]

39 голосов
/ 09 июля 2010

Полнотекстовый поиск (с использованием CONTAINS) будет быстрее / эффективнее, чем использование LIKE с подстановочными знаками. Полнотекстовый поиск (FTS) включает в себя возможность определения полнотекстовых индексов, которые FTS может использовать. Не знаю, почему вы не определили бы индекс FTS, если бы намеревались использовать эту функциональность ...

LIKE с подстановочными знаками слева (IE: LIKE '%Search') не может использовать индекс (при условии, что он существует для столбца), гарантируя сканирование таблицы. Я не проверял и не сравнивал, но регулярное выражение имеет ту же ловушку. Чтобы уточнить, LIKE '%Search' и LIKE '%Search%' могут не использовать индекс; LIKE 'Search%' может использовать индекс.

6 голосов
/ 09 июля 2010

Для типичной базы данных поиск CONTAINS может быть намного быстрее, при условии, что для искомого поля построен соответствующий индекс полнотекстового поиска.Оценка оператора LIKE обычно не использует индекс и, следовательно, должна читать все данные.

0 голосов
/ 18 сентября 2015

Как поиск по таблице сам по себе, убьет производительность.Лучше применить поиск по CTE.

...