Использовать '=' или LIKE для сравнения строк в SQL?

Там (почти религиозная) дискуссия, если вы должны использовать LIKE или '=' для сравнения строк в операторах SQL.

  • Есть ли причины использовать LIKE?
  • Есть ли причины использовать '='?
  • Производительность? Читаемость?

Ответ 1

Чтобы увидеть разницу в производительности, попробуйте следующее:

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

Сравнение строк с '=' выполняется намного быстрее.

Ответ 2

LIKE, и оператор равенства имеет разные цели, они не делают то же самое: = намного быстрее, тогда как LIKE может интерпретировать подстановочные знаки. Используйте = везде, где вы можете, и LIKE, где бы вы ни находились.

SELECT * FROM user WHERE login LIKE 'Test%';
-- Matches
--   TestUser1
--   TestUser2
--   TestU
--   Test
--   etc.

Ответ 3

В моем небольшом опыте:

"=" для точных совпадений.

"LIKE" для парциальных совпадений.

Ответ 4

Есть несколько других трюков, которые Postgres предлагает для сопоставления строк (если это будет ваша БД):

ILIKE, который нечувствителен к регистру LIKE:

select * from people where name ilike 'JOHN'

Матчи:

  • Джон
  • джон
  • JOHN

И если вы хотите разозлить себя, вы можете использовать регулярные выражения:

select * from people where name ~ 'John.*'

Матчи:

  • Джон
  • Johnathon
  • Джонни

Ответ 5

Точно так же, как в головах, оператор '=' будет заполнять строки с пробелами в Transact-SQL. Поэтому 'abc' = 'abc ' вернет true; 'abc' LIKE 'abc ' вернет false. В большинстве случаев "=" будет правильным, но в моем недавнем случае это не так.

Итак, в то время как '=' быстрее, LIKE может более четко указать ваши намерения.

http://support.microsoft.com/kb/316626

Ответ 6

Для сопоставления шаблонов используйте LIKE. Для точного соответствия =.

Ответ 7

LIKE используется для сопоставления шаблонов, а = используется для теста равенства (как определено используемым COLLATION).

= может использовать индексы, а запросы LIKE обычно требуют проверки каждой отдельной записи в наборе результатов, чтобы отфильтровать ее (если вы не используете полнотекстовый поиск), поэтому = имеет лучшую производительность.

Ответ 8

LIKE делает совпадение как подстановочные знаки char [*,?] в оболочке
LIKE '% suffix' - дайте мне все, что заканчивается суффиксом. Вы не могли бы сделать это с помощью =
Зависит от случая на самом деле.

Ответ 9

Существует еще одна причина использования "like", даже если производительность медленнее: значения символов неявно преобразуются в целое число при сравнении, поэтому:

объявить @transid varchar (15)

если @transid!= 0

предоставит вам "Преобразование значения varchar" 123456789012345 "переполненная ошибка int column".