Ответ 1
Как отмечает @ocdecio, если оптимизатор достаточно умен, разница не должна быть разной, но если вы хотите убедиться в том, что происходит за кулисами, вы должны сравнить две планы выполнения запросов.
Я знаю, что это довольно простой вопрос, и я думаю, что знаю ответ... но я бы хотел подтвердить.
Действительно ли эти запросы эквивалентны?
SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'
Возможно, есть накладные расходы на производительность при использовании как без диких карт?
У меня есть приложение, которое опционально использует LIKE и wild cards. SP в настоящее время делает подобное и добавляет wild cards - я думаю, что просто обновляю запрос, который нужно использовать, но при необходимости приложите дополнительные карты.
Как отмечает @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 '
Любой хороший оптимизатор уменьшит первое выражение до второго.