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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top