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

mysql SELECT NOT IN () - disjunkte Menge?

Sie sollten nicht vorhanden verwenden:

SELECT DISTINCT a, b, c FROM t1 WHERE NOT EXISTS (SELECT NULL FROM t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c)

Die Verwendung von NOT IN ist dafür nicht die beste Methode, selbst wenn Sie nur einen Schlüssel ankreuzen. Der Grund dafür ist, dass das DBMS bei Verwendung von NOT EXISTS nur Indizes prüfen muss, wenn Indizes für die benötigten Spalten vorhanden sind, während es bei NOT IN die tatsächlichen Daten lesen und eine vollständige Ergebnismenge erstellen muss, die anschließend überprüft werden muss .

Einen LEFT JOIN zu verwenden und dann auf NULL zu prüfen, ist ebenfalls eine schlechte Idee, es wird schmerzhaft langsam sein, wenn die Tabellen groß sind, da die Abfrage den gesamten Join erstellen muss, beide Tabellen vollständig lesen und anschließend viel davon wegwerfen muss. Auch wenn die Spalten NULL-Werte zulassen, wird die Überprüfung auf NULL falsch positive Ergebnisse liefern.