373 Stimmen

Gleich(=) vs. LIKE

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?

5voto

beloncfy Punkte 31

= 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

4voto

Bruno Punkte 114719

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

2voto

notnot Punkte 4330

Es kommt wirklich darauf an, was Sie mit der Abfrage erreichen wollen. Wenn Sie eine exakte Übereinstimmung meinen, dann verwenden Sie =, wenn Sie eine unscharfe Übereinstimmung meinen, dann verwenden Sie LIKE. Bei Code ist es in der Regel sinnvoll, zu sagen, was man meint.

2voto

Josh Stodola Punkte 79569

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

1voto

Chris B Punkte 727

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

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.

Powered by:

X