Heim >Datenbank >MySQL-Tutorial >Wie kann man mehrere Spalten in der WHERE IN-Klausel von MySQL effizient mit Indizes verwenden?

Wie kann man mehrere Spalten in der WHERE IN-Klausel von MySQL effizient mit Indizes verwenden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-22 12:06:34194Durchsuche

How to Efficiently Use Multiple Columns in MySQL's WHERE IN Clause with Indexes?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn