Heim >Datenbank >MySQL-Tutorial >Wie kann ich MySQL mit mehreren Spalten in einer IN-Klausel effizient abfragen?
Effiziente MySQL-Abfrage für mehrere Spalten in der IN-Klausel
Ihre MySQL-Datenbank verfügt über vier Spalten, die den geografischen Koordinaten x,y für den Anfang und entsprechen Endposition. Sie möchten eine effiziente Abfrage dieser Daten durchführen und dabei eine Liste von etwa hundert Kombinationen geografischer Paare verwenden.
Der Brute-Force-Ansatz wäre die Verwendung einer IN-Klausel, wie in Ihrer Oracle-Antwort vorgeschlagen:
SELECT * FROM my_table WHERE (x0, y0, x1, y1) IN ((4, 3, 5, 6), ... ,(9, 3, 2, 1));
Dieser Ansatz ist jedoch für MySQL nicht effizient, insbesondere bei einer großen Anzahl von Zeilen.
Um die Abfrage zu optimieren, können wir den Index nutzen diese vier Spalten. Wir können das IN-Prädikat als eine Reihe von ODER-Bedingungen umschreiben:
( ( x0 = 4 AND y0 = 3 AND x1 = 5 AND y1 = 6 ) OR ( x0 = 9 AND y0 = 3 AND x1 = 2 AND y1 = 1 ) )
Durch die Verwendung separater Bedingungen zwingen wir MySQL, den Index für jede Bedingung zu verwenden, was die Abfrageleistung erheblich verbessert.
Hinweis für neuere MySQL-Versionen
In neueren Versionen von MySQL wurde der Optimierer verbessert, um effizientere Ausführungspläne zu generieren. Die Syntax (a,b) IN ((7,43),(7,44),(8,1)) wird seit langem unterstützt, in früheren Versionen traten jedoch Leistungsprobleme auf. Diese Probleme wurden jedoch behoben und neuere Optimierer können Indizes effektiv für OR-Konstrukte verwenden.
Fazit
Durch die Verwendung des OR-Bedingungsansatzes können Sie die Effizienz Ihrer MySQL-Abfrage bei der Suche nach mehreren Spalten in einer IN-Klausel. Diese Technik nutzt den verfügbaren Index und gewährleistet eine optimale Leistung für große Datensätze.
Das obige ist der detaillierte Inhalt vonWie kann ich MySQL mit mehreren Spalten in einer IN-Klausel effizient abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!