Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL - Unterschied zwischen IN und EXIST

EXISTIERT

EXISTS dient buchstäblich dazu, die Existenz bestimmter Kriterien zu überprüfen. In aktuellem Standard-SQL können Sie mehr als ein Vergleichskriterium angeben - dh wenn Sie wissen möchten, wann col_a und col_b beide übereinstimmen - was es etwas stärker macht als die IN-Klausel. MySQL IN unterstützt Tupel, aber die Syntax ist nicht portierbar, daher ist EXISTS die bessere Wahl sowohl für die Lesbarkeit als auch für die Portabilität.

Die andere Sache, die Sie bei EXISTS beachten sollten, ist, wie es funktioniert - EXISTS gibt einen booleschen Wert zurück und wird bei der ersten Übereinstimmung einen booleschen Wert zurückgeben. Wenn Sie es also mit Duplikaten/Multiples zu tun haben, ist EXISTS je nach Daten und Bedarf schneller auszuführen als IN oder JOINs.

EIN

IN ist syntaktischer Zucker für ODER-Klauseln. Obwohl es sehr entgegenkommend ist, gibt es Probleme beim Umgang mit vielen Werten für diesen Vergleich (nördlich von 1.000).

NICHT

Der NOT-Operator kehrt nur die Logik um.

Unterabfragen vs. JOINs

Das Mantra „Verwende immer Joins“ ist fehlerhaft, da JOINs riskieren, die Ergebnismenge aufzublähen, wenn es mehr als einen untergeordneten Datensatz gegen einen übergeordneten Datensatz gibt. Ja, Sie können DISTINCT oder GROUP BY verwenden, um damit umzugehen, aber es ist sehr wahrscheinlich, dass dies den Leistungsvorteil der Verwendung eines JOIN in Frage stellt. Kennen Sie Ihre Daten und was Sie für eine Ergebnismenge wollen - das ist der Schlüssel zum Schreiben von SQL, das gut funktioniert.

Um zu wiederholen, wann und warum zu wissen ist, was zu verwenden ist – LEFT JOIN IS NULL ist die schnellste Ausschlussliste in MySQL, wenn die verglichenen Spalten NICHT nullfähig sind , andernfalls sind NICHT IN/NICHT VORHANDEN die bessere Wahl.

Referenz: