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.
LIKEa operator równości ma różne cele, nie robi tego samego:
=jest znacznie szybszy, podczas gdy LIKEmoże interpretować symbole wieloznaczne. Używaj =wszędzie, gdzie możesz i LIKEgdzie 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.
LIKEjest używany do dopasowywania wzorców i =jest używany do testu równości (zgodnie z definicją COLLATIONw użyciu).
=może używać indeksów, podczas gdy LIKEzapytania 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”.