Ответы:
Чтобы увидеть разницу в производительности, попробуйте это:
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
Test
По моему небольшому опыту:
"=" для Точных Матчей.
«НРАВИТСЯ» для частичных матчей.
Postgres предлагает несколько других приемов для сопоставления строк (если это ваша БД):
ILIKE, который является нечувствительным к регистру LIKE совпадением:
select * from people where name ilike 'JOHN'
Спички:
И если вы хотите по-настоящему злиться, вы можете использовать регулярные выражения:
select * from people where name ~ 'John.*'
Спички:
Оператор '=' будет заполнять строки пробелами в Transact-SQL. Так 'abc' = 'abc 'вернется правда; 'abc' LIKE 'abc 'вернет ложь. В большинстве случаев «=» будет правильным, но в моем недавнем случае это не так.
Таким образом, хотя '=' быстрее, LIKE может более явно указать ваши намерения.
LIKEиспользуется для сопоставления с образцом и =используется для проверки на равенство (как определено COLLATIONв использовании).
=Можно использовать индексы, в то время как LIKEзапросы обычно требуют тестирования каждой отдельной записи в наборе результатов, чтобы отфильтровать ее (если вы не используете полнотекстовый поиск), поэтому =имеет лучшую производительность.
Существует еще одна причина использования «лайка», даже если производительность ниже: символьные значения неявно преобразуются в целое при сравнении, поэтому:
объявить @transid varchar (15)
если @transid! = 0
выдаст ошибку «Преобразование значения varchar« 123456789012345 »переполнило столбец int».