Utilizzare '=' o MI PIACE per confrontare le stringhe in SQL?


169

C'è la discussione (quasi religiosa), se dovresti usare LIKE o '=' per confrontare le stringhe nelle istruzioni SQL.

  • Ci sono ragioni per usare LIKE?
  • Ci sono ragioni per usare '='?
  • Prestazione? Leggibilità?

Risposte:


126

Per vedere la differenza di prestazioni, prova questo:

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

Il confronto delle stringhe con '=' è molto più veloce.


5
Woops ... ok, ho preso il punto. Tabella con ~ 600 voci, numero di 10 cifre come campo di confronto: uguale è 20-30 volte più veloce!
guerda,

194

LIKEe l'operatore di uguaglianza ha scopi diversi, non fanno la stessa cosa:
=è molto più veloce, mentre LIKEpuò interpretare i caratteri jolly. Usa =dove puoi e LIKEdove devi.

SELECT * FROM user WHERE login LIKE 'Test%';

Partite campione:

TestUser1
TestUser2
TestU
Test


37

Nella mia piccola esperienza:

"=" per le corrispondenze esatte.

"MI PIACE" per le partite parziali.


5
= non fa distinzione tra maiuscole
fanchyna,

14

Ci sono un paio di altri trucchi che Postgres offre per la corrispondenza delle stringhe (se questo è il tuo DB):

ILIKE, che è una corrispondenza LIKE senza distinzione tra maiuscole e minuscole:

select * from people where name ilike 'JOHN'

gli incontri:

  • John
  • John
  • JOHN

E se vuoi arrabbiarti davvero puoi usare le espressioni regolari:

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

gli incontri:

  • John
  • Johnathon
  • Johnny

1
Per quanto ne so, l'espressione regolare e parole chiave simili hanno un rendimento peggiore di '='
Ceilingfish

Errore di battitura "ilike" per "like"
Salah Alshaal,

9

Proprio come un avvertimento, l'operatore '=' riempie le stringhe con spazi in Transact-SQL. Quindi 'abc' = 'abc 'tornerà vero; 'abc' LIKE 'abc 'restituirà false. Nella maggior parte dei casi '=' sarà corretto, ma in un mio recente caso non lo era.

Quindi, mentre '=' è più veloce, LIKE potrebbe affermare in modo più esplicito le tue intenzioni.

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


7

Per la corrispondenza dei motivi, usare LIKE. Per corrispondenza esatta =.


6

LIKEviene utilizzato per la corrispondenza dei modelli e =viene utilizzato per il test di uguaglianza (come definito COLLATIONdall'uso in uso).

=può utilizzare gli indici mentre le LIKEquery in genere richiedono di testare ogni singolo record nel set di risultati per filtrarlo (a meno che non si stia utilizzando la ricerca full-text), quindi =ha prestazioni migliori.


4

MI PIACE abbinando come caratteri jolly char [*,?] Nella shell
MI PIACE '% suffix' - dammi tutto ciò che termina con il suffisso. Non puoi farlo con =
Dipende dal caso in realtà.


3

C'è un altro motivo per usare "mi piace" anche se le prestazioni sono più lente: i valori dei caratteri vengono implicitamente convertiti in numeri interi se confrontati, quindi:

dichiarare @transid varchar (15)

if @transid! = 0

ti darà un errore "La conversione del valore varchar '123456789012345' ha traboccato una colonna int".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.