Использовать '=' или LIKE для сравнения строк в SQL? - PullRequest
150 голосов
/ 05 февраля 2009

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

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

Ответы [ 9 ]

178 голосов
/ 05 февраля 2009

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

SELECT * FROM user WHERE login LIKE 'Test%';

Примеры совпадений:

TestUser1
TestUser2
TestU
Тест

118 голосов
/ 05 февраля 2009

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

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

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

32 голосов
/ 05 февраля 2009

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

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

"НРАВИТСЯ" для частичных матчей.

12 голосов
/ 05 февраля 2009

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

ILIKE - регистр LIKE без учета регистра:

select * from people where name ilike 'JOHN'

Соответствует:

  • John
  • джон
  • JOHN

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

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

Матчи:

  • John
  • Johnathon
  • Джонни
9 голосов
/ 23 апреля 2014

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

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

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

7 голосов
/ 05 февраля 2009

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

6 голосов
/ 05 февраля 2009

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

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

3 голосов
/ 14 июля 2012

Существует еще одна причина использования «лайка», даже если производительность ниже: символьные значения неявно преобразуются в целое при сравнении, поэтому:

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

если @transid! = 0

выдаст ошибку «Преобразование значения varchar« 123456789012345 »переполнило столбец int».

3 голосов
/ 05 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...