Подтвердить что ты не робот

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

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

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

SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'

Возможно, есть накладные расходы на производительность при использовании как без диких карт?

У меня есть приложение, которое опционально использует LIKE и wild cards. SP в настоящее время делает подобное и добавляет wild cards - я думаю, что просто обновляю запрос, который нужно использовать, но при необходимости приложите дополнительные карты.

4b9b3361

Ответ 1

Как отмечает @ocdecio, если оптимизатор достаточно умен, разница не должна быть разной, но если вы хотите убедиться в том, что происходит за кулисами, вы должны сравнить две планы выполнения запросов.

Ответ 2

Оригинальный ответ Мэтта Уитфилда из здесь

Между = и 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  '

Ответ 3

Любой хороший оптимизатор уменьшит первое выражение до второго.