Какой из следующих запросов быстрее (как против содержит)?
SELECT * FROM table WHERE Column LIKE '%test%';
или
SELECT * FROM table WHERE Contains(Column, "test");
sql-server
performance
contains
sql-like
user667429
источник
источник
Ответы:
Второй (при условии, что вы имеете в виду
CONTAINS
, и фактически поместите его в правильный запрос) должен быть быстрее, потому что он может использовать некоторую форму индекса (в данном случае, полнотекстовый индекс). Конечно, эта форма запроса доступна, только если столбец имеет полнотекстовый индекс. Если это не так, то доступна только первая форма.Первый запрос, использующий LIKE, не сможет использовать индекс, поскольку он начинается с подстановочного знака, поэтому всегда требует полного сканирования таблицы.
CONTAINS
Запрос должен быть:источник
CONTAINS
? Что из этого? Первоначальная форма вопроса не имелаColumn CONTAIN("%test%",Column)>0
ничего общего с действительностью. Это все еще не совсем верно.Запустив оба запроса на экземпляре SQL Server 2012, я могу подтвердить, что первый запрос был самым быстрым в моем случае.
Запрос с
LIKE
ключевым словом показал сканирование кластерного индекса.CONTAINS
Также был кластерный индекс сканирования с дополнительными операторами для полного текста матча и слиянием.источник
LIKE
Запрос с ведущим шаблоном не сможет эффективно использовать индексную часть. Это нужно будет просто отсканировать все это. Хотя, несомненно, могут быть некоторые обстоятельства, при которых полное сканирование CI работает лучше, чем запрос, использующий полнотекстовый индекс (возможно, если, например, соответствует очень высокий процент строк), это в значительной степени будет исключением, а не каким-то общим правилом, которое вы «можете подтвердить». ».LIKE
.Я думаю, что это
CONTAINS
заняло больше времени и использовалось,Merge
потому что в вашем запросе была тире ("-")adventure-works.com
.Тире это слово разрыв, поэтому
CONTAINS
поиск производился по полнотекстовому индексу,adventure
а затем он искалworks.com
и объединял результаты.источник
Также попробуйте изменить это:
К этому:
Первый найдет записи со значениями, такими как « это тест » и « контрольный пример - это план ».
Последний также найдет записи со значениями вроде « я проверяю это » и « это самое большое ».
источник
CONTAINS
него упоминаются только префиксные термины, такие как «test *», а не суффиксные термины, такие как « test», и не полный поиск по подстроке, например «* test ». Я не пробовал, хотя.