SQL LIKE без подстановочных знаков, такой же, как '='?

StackOverflow https://stackoverflow.com/questions/404226

  •  03-07-2019
  •  | 
  •  

Вопрос

Я знаю, что это довольно простой вопрос, и я думать Я знаю ответ... но мне хотелось бы подтвердить.

Действительно ли эти запросы эквивалентны?

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  '

Любой хороший оптимизатор свел бы первое выражение ко второму.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top