Gibt es bei der Verwendung von SQL irgendwelche Vorteile bei der Verwendung von =
in einem WHERE
Klausel anstelle von LIKE
?
Ohne spezielle Operatoren, LIKE
y =
sind die gleichen, richtig?
Gibt es bei der Verwendung von SQL irgendwelche Vorteile bei der Verwendung von =
in einem WHERE
Klausel anstelle von LIKE
?
Ohne spezielle Operatoren, LIKE
y =
sind die gleichen, richtig?
=
ist viel schneller als LIKE
.
Getestet auf MySQL mit 11 GB Daten und mehr als 10 Millionen Datensätzen, ist die Spalte f_time indiziert.
SELECT * FROM XXXXX WHERE f_time = '1621442261'
- dauerte 0.00sec und ergab 330 Datensätze
SELECT * FROM XXXXX WHERE f_time like '1621442261'
- brauchte 44,71 Sekunden und liefert 330 Rekorde
Neben den Platzhaltern ist der Unterschied zwischen =
UND LIKE
hängt sowohl von der Art des SQL-Servers als auch von der Art der Spalte ab.
Nehmen Sie dieses Beispiel:
CREATE TABLE testtable (
varchar_name VARCHAR(10),
char_name CHAR(10),
val INTEGER
);
INSERT INTO testtable(varchar_name, char_name, val)
VALUES ('A', 'A', 10), ('B', 'B', 20);
SELECT 'VarChar Eq Without Space', val FROM testtable WHERE varchar_name='A'
UNION ALL
SELECT 'VarChar Eq With Space', val FROM testtable WHERE varchar_name='A '
UNION ALL
SELECT 'VarChar Like Without Space', val FROM testtable WHERE varchar_name LIKE 'A'
UNION ALL
SELECT 'VarChar Like Space', val FROM testtable WHERE varchar_name LIKE 'A '
UNION ALL
SELECT 'Char Eq Without Space', val FROM testtable WHERE char_name='A'
UNION ALL
SELECT 'Char Eq With Space', val FROM testtable WHERE char_name='A '
UNION ALL
SELECT 'Char Like Without Space', val FROM testtable WHERE char_name LIKE 'A'
UNION ALL
SELECT 'Char Like With Space', val FROM testtable WHERE char_name LIKE 'A '
Verwendung von MS SQL Server 2012 werden die Leerzeichen am Ende beim Vergleich ignoriert, außer bei LIKE
wenn der Spaltentyp VARCHAR
.
Verwendung von MySQL 5.5 werden die Leerzeichen am Ende ignoriert für =
, aber nicht für LIKE
, beide mit CHAR
y VARCHAR
.
Verwendung von PostgreSQL 9.1 sind die Räume sowohl bei =
y LIKE
mit VARCHAR
, aber nicht mit CHAR
(siehe Dokumentation ).
Das Verhalten bei LIKE
unterscheidet sich auch mit CHAR
.
Unter Verwendung der gleichen Daten wie oben, unter Verwendung einer expliziten CAST
auf den Spaltennamen macht auch einen Unterschied :
SELECT 'CAST none', val FROM testtable WHERE char_name LIKE 'A'
UNION ALL
SELECT 'CAST both', val FROM testtable WHERE
CAST(char_name AS CHAR) LIKE CAST('A' AS CHAR)
UNION ALL
SELECT 'CAST col', val FROM testtable WHERE CAST(char_name AS CHAR) LIKE 'A'
UNION ALL
SELECT 'CAST value', val FROM testtable WHERE char_name LIKE CAST('A' AS CHAR)
Dies liefert nur Zeilen für "CAST both" und "CAST col".
Das Schlüsselwort LIKE ist zweifellos mit einem "Leistungspreis" verbunden. Das heißt, wenn Sie ein Eingabefeld haben, das möglicherweise Platzhalterzeichen enthalten könnte, die in Ihrer Abfrage verwendet werden sollen, würde ich empfehlen, LIKE zu verwenden nur wenn die Eingabe einen der Platzhalter enthält. Andernfalls wird der Standardvergleich "gleich" verwendet.
Mit freundlichen Grüßen...
In Oracle liefert ein 'like' ohne Platzhalter das gleiche Ergebnis wie ein 'equals', kann aber zusätzliche Verarbeitung erfordern. Nach Ansicht von Tom Kyte Bei der Verwendung von Literalen behandelt Oracle ein "like" ohne Wildcards als "equals", nicht aber bei der Verwendung von Bindungsvariablen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.