SQL LIKE без подстановочных знаков, такой же, как '='?
Вопрос
Я знаю, что это довольно простой вопрос, и я думать Я знаю ответ... но мне хотелось бы подтвердить.
Действительно ли эти запросы эквивалентны?
SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'
Возможно, использование типа «без подстановочных знаков» приводит к снижению производительности?
У меня есть приложение, которое дополнительно использует LIKE и подстановочные знаки.В настоящее время SP делает то же самое и добавляет подстановочные знаки - я подумываю просто обновить запрос, чтобы использовать его, но приложение добавляло подстановочные знаки по мере необходимости.
Решение
Как говорит @ocdecio, если оптимизатор достаточно умен, разницы не должно быть, но если вы хотите убедиться в том, что происходит за кулисами, вам следует сравнить планы выполнения двух запросов.
Другие советы
Оригинальный ответ Мэтта Уитфилда из здесь
Есть разница между =
и LIKE
.Когда вы выполняете сравнение строк с помощью LIKE
, все символы в строке шаблона имеют значение.Сюда входят ведущие и конечные пробелы.
Итак, если у вас есть столбец, который char
или nchar
и не nvarchar
или varchar
, будут разные результаты из-за конечных пробелов.
Небольшой пример воспроизведения такого поведения:
CREATE TABLE #temp (nam [varchar](MAX))
INSERT INTO [#temp] ([nam])
VALUES ('hello')
INSERT INTO [#temp] ([nam])
VALUES ('hello ')
SELECT * FROM #temp WHERE [nam] = 'hello '
SELECT * FROM #temp WHERE [nam] LIKE 'hello '
Любой хороший оптимизатор свел бы первое выражение ко второму.