Użyj „=” lub LIKE, aby porównać ciągi znaków w SQL?


169

Jest dyskusja (prawie religijna), czy powinieneś używać LIKE lub '=' do porównywania łańcuchów w instrukcjach SQL.

  • Czy są powody, aby używać LIKE?
  • Czy istnieją powody, aby używać znaku „=”?
  • Występ? Czytelność?

Odpowiedzi:


126

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.


5
Ups ... okej, zrozumiałem. Tabela z ~ 600 wpisami, 10-cyfrowa liczba jako pole porównawcze: Równość oznacza 20 do 30 razy szybciej!
guerda

194

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


37

Z mojego małego doświadczenia:

„=” dla dokładnych dopasowań.

„LIKE” w przypadku dopasowań częściowych.


5
= nie rozróżnia wielkości liter
fanchyna Kwietnia

14

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:

  • Jan
  • Jan
  • JAN

A jeśli chcesz się naprawdę wkurzyć, możesz użyć wyrażeń regularnych:

select * from people where name ~ 'John.*'

Mecze:

  • Jan
  • Johnathon
  • Jasio

1
O ile mi wiadomo, wyrażenie regularne i podobne słowa kluczowe mają gorszą wydajność niż „=”
Ceilingfish

Literówka „ilike” do „like”
Salah Alshaal

9

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.

http://support.microsoft.com/kb/316626


7

Aby dopasować wzorce, użyj LIKE. Aby uzyskać dokładne dopasowanie =.


6

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ść.


4

LIKE wykonuje dopasowywanie jak symbole wieloznaczne, znak [*,?] W powłoce
LIKE '% sufiks' - podaj mi wszystko, co kończy się sufiksem. Nie możesz tego zrobić z =
Zależy od przypadku.


3

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”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.