Risposte:
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.
Nella mia piccola esperienza:
"=" per le corrispondenze esatte.
"MI PIACE" per le partite parziali.
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:
E se vuoi arrabbiarti davvero puoi usare le espressioni regolari:
select * from people where name ~ 'John.*'
gli incontri:
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.
LIKE
viene utilizzato per la corrispondenza dei modelli e =
viene utilizzato per il test di uguaglianza (come definito COLLATION
dall'uso in uso).
=
può utilizzare gli indici mentre le LIKE
query 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.
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".