Производительность типа «%Query%» по сравнению с запросом СОДЕРЖИТ полнотекстовый поиск

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

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

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

or

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

?


person dotnetguts    schedule 09.07.2010    source источник
comment
Мне также было бы интересно узнать: какова относительная производительность запроса, использующего REGEXP для той же цели?   -  person JYelton    schedule 09.07.2010
comment
Какая база данных? Они будут иметь совершенно разные характеристики производительности в разных базах данных.   -  person Oded    schedule 09.07.2010
comment
@Oded: MS-SQL Server и MySQL — это два, которые я использую больше всего. Для целей вопроса я предполагаю, что SQL Server представляет наибольший интерес.   -  person JYelton    schedule 09.07.2010
comment
@dotnetguts, можете ли вы дать мне ссылку, где я могу прочитать о правильном использовании CONTAINS ... пока все, что я знаю, это то, что A CONTAINS B означает, что A является надмножеством B.   -  person abhimanyuaryan    schedule 10.03.2015


Ответы (3)


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

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

person OMG Ponies    schedule 09.07.2010
comment
В MS SQL Server для использования CONTAINS требуется полнотекстовый индекс. - person Dave Carlile; 09.07.2010
comment
Будет ли он работать быстрее, чем полнотекстовые поисковые системы, такие как Lucene/Solr? Особенно в случае миллионов записей. - person Krunal; 28.06.2013

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

person Mark Wilkins    schedule 09.07.2010

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

person Agrawars    schedule 18.09.2015
comment
попробуйте ниже URL stackoverflow.com/questions/1569002/ - person Agrawars; 18.09.2015