Там (почти религиозная) дискуссия, если вы должны использовать 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%';
-- Matches
-- TestUser1
-- TestUser2
-- TestU
-- Test
-- etc.
В моем небольшом опыте:
"=" для точных совпадений.
"LIKE" для парциальных совпадений.
Есть несколько других трюков, которые 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 может более четко указать ваши намерения.
Для сопоставления шаблонов используйте LIKE. Для точного соответствия =.
LIKE
используется для сопоставления шаблонов, а =
используется для теста равенства (как определено используемым COLLATION
).
=
может использовать индексы, а запросы LIKE
обычно требуют проверки каждой отдельной записи в наборе результатов, чтобы отфильтровать ее (если вы не используете полнотекстовый поиск), поэтому =
имеет лучшую производительность.
LIKE делает совпадение как подстановочные знаки char [*,?] в оболочке
LIKE '% suffix' - дайте мне все, что заканчивается суффиксом. Вы не могли бы сделать это с помощью =
Зависит от случая на самом деле.
Существует еще одна причина использования "like", даже если производительность медленнее: значения символов неявно преобразуются в целое число при сравнении, поэтому:
объявить @transid varchar (15)
если @transid!= 0
предоставит вам "Преобразование значения varchar" 123456789012345 "переполненная ошибка int column".