SQL LIKE ohne Platzhalter das gleiche wie ‚=‘?
Frage
Ich weiß, dass dies eine ziemlich grundlegende Frage ist, und I denken Ich kenne die Antwort ... aber ich würde bestätigen möchte.
Sind diese Abfragen wirklich gleichwertig?
SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'
Vielleicht ist es eine Performance-Overhead wie ohne Wildcards in Verwendung?
Ich habe eine Anwendung, die LIKE & Wild Cards verwendet optional. Die SP hat zur Zeit dergleichen, und fügt die Wildcards -. Ich denke da an nur die Abfrage zu aktualisieren, wie zu verwenden, aber haben die App, die Wildcards anhängen nach Bedarf
Lösung
Wie @ocdecio sagt, wenn der Optimierer ist intelligent genug, es sollte kein Unterschied sein, aber wenn Sie sicherstellen möchten, was hinter den Kulissen geschieht, sollten Sie die zwei Abfrage-Ausführungspläne vergleichen.
Andere Tipps
Original Antwort von Matt Whitfield von hier
Es gibt einen Unterschied zwischen =
und LIKE
. Wenn Sie String-Vergleiche unter Verwendung LIKE
ausführen, werden alle Zeichen in der Musterkette sind signifikant. Dazu gehören führende oder nachgestellte Leerzeichen.
Wenn Sie also eine Spalte haben, die char
oder nchar
und nicht nvarchar
oder varchar
, gibt es unterschiedliche Ergebnisse werden aufgrund nachstehende Leerzeichen.
Kleines Beispiel dieses Verhalten zu reproduzieren:
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 '
Jeder gute Optimierer den ersten Ausdruck auf den zweiten reduzieren würde.