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
Freigeben: 2024-12-22 12:06:34
Original
186 Leute haben es durchsucht

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))
Nach dem Login kopieren

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 )
)
Nach dem Login kopieren

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))
Nach dem Login kopieren

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 ) 
Nach dem Login kopieren

anstelle von:

WHERE ( seq > 7 ) 
  OR ( seq = 7 AND sub > 42 ) 
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage