Odpowiedzi:
Aby zobaczyć różnicę w wydajności, spróbuj tego:
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
Porównywanie ciągów z „=” jest znacznie szybsze.
LIKE
a operator równości ma różne cele, nie robi tego samego:
=
jest znacznie szybszy, podczas gdy LIKE
może interpretować symbole wieloznaczne. Używaj =
wszędzie, gdzie możesz i LIKE
gdzie musisz.
SELECT * FROM user WHERE login LIKE 'Test%';
Przykładowe mecze:
TestUser1
TestUser2
TestU
Test
Z mojego małego doświadczenia:
„=” dla dokładnych dopasowań.
„LIKE” w przypadku dopasowań częściowych.
Istnieje kilka innych sztuczek, które Postgres oferuje do dopasowywania ciągów (jeśli tak się dzieje, że jest to twoja baza danych):
ILIKE, czyli dopasowanie LIKE bez rozróżniania wielkości liter:
select * from people where name ilike 'JOHN'
Mecze:
A jeśli chcesz się naprawdę wkurzyć, możesz użyć wyrażeń regularnych:
select * from people where name ~ 'John.*'
Mecze:
Tak jak na początku, operator „=” dopełni łańcuchy spacjami w Transact-SQL. Więc 'abc' = 'abc '
wróci prawda; 'abc' LIKE 'abc '
zwróci wartość false. W większości przypadków '=' będzie poprawne, ale w moim ostatnim przypadku tak nie było.
Więc podczas gdy '=' jest szybsze, LIKE może wyraźniej określać twoje zamiary.
LIKE
jest używany do dopasowywania wzorców i =
jest używany do testu równości (zgodnie z definicją COLLATION
w użyciu).
=
może używać indeksów, podczas gdy LIKE
zapytania zwykle wymagają testowania każdego rekordu w zestawie wyników w celu jego odfiltrowania (chyba że używasz wyszukiwania pełnotekstowego), więc =
ma lepszą wydajność.
Jest jeszcze jeden powód, dla którego warto używać „like”, nawet jeśli wydajność jest wolniejsza: wartości znaków są niejawnie konwertowane na liczby całkowite podczas porównywania, więc:
deklaruj @transid varchar (15)
jeśli @transid! = 0
zwróci błąd „Konwersja wartości varchar '123456789012345' przepełniła kolumnę typu int”.