Существует (почти религиозное) обсуждение, следует ли вам использовать LIKE или '=' для сравнения строк в операторах SQL.
- Есть ли причины использовать LIKE?
- Есть ли причины использовать '='?
- Представление? Читаемость?
Существует (почти религиозное) обсуждение, следует ли вам использовать LIKE или '=' для сравнения строк в операторах SQL.
Чтобы увидеть разницу в производительности, попробуйте следующее:
SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name = B.name
SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name LIKE B.name
Сравнение строк с '=' выполняется намного быстрее.
LIKE
и оператор равенства имеют разные цели, они не делают одно и то же:=
намного быстрее, тогда как LIKE
может интерпретировать подстановочные знаки. Используйте =
везде, где можете, и LIKE
везде, где необходимо.
SELECT * FROM user WHERE login LIKE 'Test%';
Примеры совпадений:
TestUser1
TestUser2
TestU
Тест
По моему небольшому опыту:
"=" для точных совпадений.
«НРАВИТСЯ» для частичных совпадений.
Есть еще пара трюков, которые Postgres предлагает для сопоставления строк (если это ваша БД):
ILIKE, который является совпадением LIKE без учета регистра:
select * from people where name ilike 'JOHN'
Спички:
И если вы хотите по-настоящему разозлиться, вы можете использовать регулярные выражения:
select * from people where name ~ 'John.*'
Спички:
На заметку, оператор '=' дополняет строки пробелами в Transact-SQL. Итак, 'abc' = 'abc '
вернет true; 'abc' LIKE 'abc '
вернет false. В большинстве случаев '=' будет правильным, но в моем недавнем случае это было не так.
Таким образом, несмотря на то, что '=' работает быстрее, LIKE может более явно указать ваши намерения.
http://support.microsoft.com/kb/316626
Для сопоставления с образцом используйте LIKE. Для точного совпадения =.
LIKE
используется для сопоставления с образцом, а =
используется для проверки равенства (как определено используемым COLLATION
).
=
может использовать индексы, в то время как запросы LIKE
обычно требуют тестирования каждой отдельной записи в наборе результатов, чтобы отфильтровать ее (если вы не используете полнотекстовый поиск), поэтому =
имеет лучшую производительность.
LIKE выполняет сопоставление с подстановочными знаками char [*, ?] в оболочке
LIKE '%suffix' - дает мне все, что заканчивается суффиксом. Вы не могли бы сделать это с помощью =
На самом деле зависит от случая.
Есть еще одна причина использовать «подобно», даже если производительность ниже: символьные значения неявно преобразуются в целые числа при сравнении, поэтому:
объявить @transid varchar(15)
если @transid != 0
выдаст вам ошибку «Преобразование значения varchar« 123456789012345 »переполнило столбец int».