2010-07-09 5 views
36

У меня есть ситуация, когда я хотел бы найти слово.Производительность как%% Query% 'vs full text search CONTAINS query

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

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

или

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

?

+0

Мне также будет интересно узнать: какова относительная производительность запроса с использованием REGEXP для этой же цели? – JYelton

+1

Какая база данных? Они будут иметь совершенно разные характеристики производительности в разных базах данных. – Oded

+0

@Oded: MS-SQL Server и MySQL - это те, которые я использую больше всего. Для целей вопроса я предполагаю, что SQL Server представляет наибольший интерес. – JYelton

ответ

36

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

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

+4

В MS SQL Server требуется полный текстовый индекс в порядке использовать КОНТЕЙНЕРЫ. –

+1

Будет ли это быстрее, чем полнотекстовые поисковые системы .. как Lucene/Solr? Особенно в случае миллионов записей. – Krunal

6

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

-1

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

+0

попробуйте под URL http://stackoverflow.com/questions/1569002/how-can-i-optimize-refactor-a-tsql-like-clause/32329298#32329298 – Agrawars