Mehrere MySQL-Spalten in der IN-Klausel
Problem:
Sie haben eine Datenbanktabelle mit vier Spalten, die geografische Koordinaten darstellen: x0, y0, x1 und y1. Sie haben einen Index für diese Spalten in der Reihenfolge x0, y0, x1, y1. Sie möchten die Tabelle mithilfe einer Liste von Koordinatenpaaren in einer WHERE IN-Klausel effizient abfragen.
Lösung:
Um den Index effektiv zu nutzen, schreiben Sie das IN-Prädikat um als eine Reihe von ODER-Bedingungen, wobei jede Bedingung die Koordinaten der aktuellen Zeile mit einem Koordinatenpaar in der vergleicht Liste.
Beispiel:
Anstelle von:
(x0, y0, x1, y1) IN ((4, 3, 5, 6), (9, 3, 2, 1))
Verwenden Sie:
( ( x0 = 4 AND y0 = 3 AND x1 = 5 AND y1 = 6 ) OR ( x0 = 9 AND y0 = 3 AND x1 = 2 AND y1 = 1 ) )
Optimierung in Neuere MySQL-Versionen:
In neueren Versionen von MySQL ist die Der Optimierer wurde verbessert, um Indizes in solchen Abfragen besser nutzen zu können. Die Syntax:
(a,b) IN ((7,43),(7,44),(8,1))
wird schon seit langem unterstützt, es gab jedoch zuvor Leistungsprobleme. Der neuere Optimierer generiert jetzt effizientere Ausführungspläne.
Hinweis:
Eine ähnliche Optimierung gilt für OR-Konstrukte in WHERE-Klauseln. Erwägen Sie für eine verbesserte Effizienz die Verwendung von:
WHERE ( seq >= 7 ) AND ( seq > 7 OR sub > 42 )
anstelle von:
WHERE ( seq > 7 ) OR ( seq = 7 AND sub > 42 )
Das obige ist der detaillierte Inhalt vonWie kann man mehrere Spalten in der WHERE IN-Klausel von MySQL effizient mit Indizes verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!