SQL LIKE senza caratteri jolly uguale a '='?
Domanda
So che questa è una domanda piuttosto semplice, e penso conosco la risposta ... ma vorrei confermare.
Queste query sono veramente equivalenti?
SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'
Forse c'è un sovraccarico prestazionale nell'usare come senza jolly?
Ho un'app che utilizza facoltativamente LIKE & amp; jolly. L'SP attualmente fa il like e aggiunge i caratteri jolly - Sto pensando di aggiornare la query per usare il like ma fare in modo che l'app aggiunga i caratteri jolly secondo necessità.
Soluzione
Come dice @ocdecio, se l'ottimizzatore è abbastanza intelligente non ci dovrebbero essere differenze, ma se vuoi essere sicuro di ciò che sta accadendo dietro le quinte devi confrontare i piani di esecuzione delle due query.
Altri suggerimenti
Risposta originale di Matt Whitfield da qui
Esiste una differenza tra =
e LIKE
. Quando si eseguono confronti di stringhe utilizzando LIKE
, tutti i caratteri nella stringa del motivo sono significativi. Ciò include spazi iniziali o finali.
Quindi, se hai una colonna che è char
o nchar
e non nvarchar
o varchar
, ci sarà essere risultati diversi a causa di spazi finali.
Piccolo esempio per riprodurre questo comportamento:
CREATE TABLE #temp (nam [varchar](MAX))
INSERT INTO [#temp] ([nam])
VALUES ('hello')
INSERT INTO [#temp] ([nam])
VALUES ('hello ')
SELECT * FROM #temp WHERE [nam] = 'hello '
SELECT * FROM #temp WHERE [nam] LIKE 'hello '
Qualsiasi buon ottimizzatore ridurrebbe la prima espressione alla seconda.