Відповіді:
Щоб побачити різницю продуктивності, спробуйте:
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" для часткових матчів.
Є кілька інших хитрощів, які 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
запити зазвичай вимагають перевірити кожну запис у наборі результатів, щоб відфільтрувати її (якщо ви не використовуєте повний пошук тексту), щоб =
мати кращі показники.
Існує ще одна причина використання "like", навіть якщо продуктивність повільніша: значення символів неявно перетворюються на цілі числа в порівнянні, так що:
оголосити @transid varchar (15)
якщо @transid! = 0
дасть вам помилку "Перетворення значення varchar" 123456789012345 "переповнено колонку int".