Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe der IN-Klausel von MySQL mehrere Spalten effizient abfragen?
Abfragen mehrerer Spalten in einer IN-Klausel mit MySQL
Bei der Arbeit mit strukturierten Daten ist das Abfragen mehrerer Spalten innerhalb einer IN-Klausel ein häufiger Vorgang . Für MySQL gibt es jedoch einen subtilen Unterschied zwischen der Verwendung der IN-Klausel mit einem einzelnen Tupel und mit einer Reihe von Tupeln.
Einzelne Tupelabfrage:
Das Original Die Frage beschreibt ein Szenario, in dem vier Spalten (x0, y0, x1, y1) geografische Koordinaten darstellen. Für eine einzelne Wertekombination wie (4, 3, 5, 6) können Sie die IN-Klausel wie folgt verwenden:
SELECT * FROM my_table WHERE (x0, y0, x1, y1) IN ((4, 3, 5, 6))
Mit einem zusammengesetzten Index für (x0, y0, x1, y1 ), findet diese Abfrage effizient die gewünschte Zeile.
Mehrfache Tupelabfrage:
Allerdings Die Frage beinhaltet auch die Abfrage einer Liste von Tupeln, wie zum Beispiel [(4, 3, 5, 6), (9, 3, 2, 1)]. In solchen Szenarien verarbeitet der MySQL-Optimierer die IN-Klausel möglicherweise nicht immer optimal.
Optimierungsverbesserung in neueren MySQL-Versionen:
In früheren MySQL-Versionen (vor 5.7) Der Optimierer würde die Mehrfachtupelabfrage in eine Reihe von OR-Klauseln zerlegen, wie im bereitgestellten Dokument beschrieben Antwort:
( ( x0 = 4 AND y0 = 3 AND x1 = 5 AND y1 = 6 ) OR ( x0 = 9 AND y0 = 3 AND x1 = 2 AND y1 = 1 ) )
Dieser Ansatz könnte zu ineffizienten Ausführungsplänen führen, insbesondere bei großen Datensätzen.
In neueren Versionen von MySQL (5.7 und höher) wurde der Optimierer verbessert, um mehr zu generieren Effiziente Pläne für mehrere Tupel-IN-Abfragen. Für diese Versionen wird die Verwendung der folgenden Syntax empfohlen:
(x0, y0, x1, y1) IN ((4, 3, 5, 6), (9, 3, 2, 1))
Der Optimierer generiert automatisch einen optimierten Ausführungsplan, der den verfügbaren Index nutzt.
Fazit:
Bei der Abfrage mehrerer Spalten in einer IN-Klausel mit MySQL hängt die empfohlene Vorgehensweise von der MySQL-Version ab. Bei älteren Versionen empfiehlt es sich, die Abfrage in ODER-Klauseln zu zerlegen. Bei neueren Versionen kann der verbesserte Optimierer mehrere Tupel-IN-Abfragen effizient verarbeiten, ohne dass eine manuelle Umstrukturierung erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe der IN-Klausel von MySQL mehrere Spalten effizient abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!