Ответы:
Чтобы увидеть разницу в производительности, попробуйте это:
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».