Heim >Datenbank >MySQL-Tutorial >Welche Indexkonfiguration (Bereichsspalte zuerst vs. Spalte mit niedriger Kardinalität zuerst) ist optimal für Bereichsabfragen für Spalten mit hoher und niedriger Kardinalität?
Welche Indexkonfiguration ist optimal, wenn mit Bereichsabfragen mit Spalten mit hoher und niedriger Kardinalität gearbeitet wird?
Im gegebenen Szenario haben wir eine Tabelle „Dateien“ mit einem Primärschlüssel für „did“ und „Dateiname“ und zwei zusätzlichen Indizes: „fe“ für „filetime“ und „ext“ und „ef“ auf 'ext' und 'filetime'. Unsere Abfrage umfasst das Filtern von Zeilen basierend auf „ext“ und „filetime“ unter Verwendung von Bereichsbedingungen.
Lassen Sie uns untersuchen, welche Indexkonfiguration für diese Abfrage effizienter ist.
Indexoptionen auswerten
Um den optimalen Index zu ermitteln, können wir die potenzielle Indexnutzung und Kostenschätzungen analysieren ERKLÄREN:
Fe erzwingen (Bereichsspalte zuerst):
EXPLAIN SELECT COUNT(*), AVG(fsize) FROM files FORCE INDEX(fe) WHERE ext = 'gif' AND filetime >= '2015-01-01' AND filetime < '2015-01-01' + INTERVAL 1 MONTH;
Ef erzwingen (Spalte mit niedriger Kardinalität zuerst):
EXPLAIN SELECT COUNT(*), AVG(fsize) FROM files FORCE INDEX(ef) WHERE ext = 'gif' AND filetime >= '2015-01-01' AND filetime < '2015-01-01' + INTERVAL 1 MONTH;
Analyse
EXPLAIN legt das nahe Die Verwendung von „ef“ (Spalte mit niedriger Kardinalität zuerst) führt zu einem effizienteren Ausführungsplan im Vergleich zu „fe“. Dies liegt daran, dass „ef“ es dem Optimierer ermöglicht, Zeilen mithilfe beider Spalten des Index zu filtern, was zu geringeren geschätzten Kosten führt.
Optimierer-Trace
Der Optimierer-Trace bietet zusätzliche Einblicke in die Indexauswertung Prozess:
"potential_range_indices": [ { "index": "fe", "usable": true }, { "index": "ef", "usable": true } ], "analyzing_range_alternatives": { "range_scan_alternatives": [ { "index": "fe", "ranges": [...], "index_only": false, "rows": 16684, "cost": 20022 }, { "index": "ef", "ranges": [...], "index_only": false, "rows": 538, "cost": 646.61 } ] }, "attached_conditions_computation": [ { "access_type_changed": { "table": "`files`", "index": "ef", "old_type": "ref", "new_type": "range", "cause": "uses_more_keyparts" } } ]
Schlussfolgerungen
Der Optimierer-Trace bestätigt, dass:
Unter Berücksichtigung sowohl der EXPLAIN-Ausgabe als auch des Optimizer-Trace ist daher die optimale Indexkonfiguration ef (ext, filetime) für Abfragen, die sowohl ext- als auch filetime-Bereichsbedingungen betreffen. Indem wir die Spalte mit niedriger Kardinalität an die erste Stelle im Index setzen, ermöglichen wir dem Optimierer, beide Spalten effektiv zu nutzen, was zu einem effizienteren Ausführungsplan führt.
Das obige ist der detaillierte Inhalt vonWelche Indexkonfiguration (Bereichsspalte zuerst vs. Spalte mit niedriger Kardinalität zuerst) ist optimal für Bereichsabfragen für Spalten mit hoher und niedriger Kardinalität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!