Operationen in MySQL Ausführungsplänen


MySQL Referenz: http://dev.mysql.com/doc/refman/5.6/en/explain-output.html

Index- und Tabellenzugriffe

MySQL-Ausführungspläne können besonders leicht missverstanden werden und ein falsches Gefühl von Sicherheit geben. In den Ausführungsplänen bedeutet der Begriff „Index“ oft nur, dass der Index irgendwie benutzt wird – nicht dass er effizient benutzt wird. Die wichtigste Information eines MySQL-Ausführungsplanes steckt in der type-Spalte. Aber auch dort bedeutet index nicht unbedingt etwas Gutes.

eq_ref, const

Durchwandert den Index-Baum um eine Zeile zu finden (wie INDEX UNIQUE SCAN) und lädt weitere Spalten aus der Tabelle falls nötig (wie TABLE ACCESS BY INDEX ROWID). Die Datenbank verwendet diese Operation, wenn ein Constraint sicherstellt, dass maximal ein Eintrag dem Abfragekriterium entspricht. Siehe „Using Index“ um zu prüfen, ob ein Tabellenzugriff stattfindet.

ref, range

Durchwandert den Indexbaum und folgt anschließend den Index-Blättern, um alle Treffer zu finden (wie INDEX RANGE SCAN) und lädt weitere Spalten aus der Tabelle falls nötig (wie TABLE ACCESS BY INDEX ROWID). Siehe „Using Index“ um zu prüfen, ob ein Tabellenzugriff stattfindet.

index

Liest den ganzen Index – alle Zeilen – in der Reihenfolge des Indexes.

ALL

Auch bekannt als Full-Table-Scan (FTS). Liest die ganze Tabelle – alle Zeilen – wie gespeichert. Das heißt, in „zufälliger“ Reihenfolge. Obwohl die Blöcke nicht einzeln, sondern mehrere auf einmal gelesen werden, gehört ALL zu den teuersten Zugriffsmethoden überhaupt. Neben der Last am Speichersystem ist ein Full-Table-Scan auch sehr CPU-intensiv, da alle Tabellenzeilen gegen die where-Klausel geprüft werden müssen. Siehe auch „Full-Table-Scan“.

Using Index (Extra)

Wenn „Using Index“ in der Extra-Spalte aufscheint, heißt das, dass kein Zugriff auf die eigentliche Tabelle stattfindet, weil alle benötigten Spalten sind im Index sind. Eine bessere Bezeichnung wäre daher „Using Index ONLY“. Wenn der Zugriff über einen Clustered Index erfolgt (z. B. PRIMARY mit InnoDB), scheint „Using Index“ nicht auf, obwohl es ein Index-Only-Scan stattfindet. Siehe „Index-Only-Scan: Den Tabellenzugriff vermeiden“.

PRIMARY (in key oder possible_keys spalte)

PRIMARY bezeichnet jenen Index, der implizit mit dem Primärschlüssel angelegt wird. Die Spalten im PRIMARY-Index entsprechen den Spalten im Primärschlüssel.

Bei unseren Schlulungs-, Tuning-, und
Literaturangeboten ist für jeden was dabei

Sortieren und Gruppieren

using filesort (Extra)

Der Hinweis „using filesort“ in der Extra-Spalte bedeutet, dass eine explizite Sortierung stattfindet – unabhängig davon, was oder wo sortiert wird. Diese Operation benötigt Speicher, um das Ergebnis zwischenzuspeichern (keine Ausführung „am Fließband“). Siehe ORDER BY indizieren“.

Top-N-Abfragen

implizit: kein „using filesort“ in Extra

MySQL kennzeichnet Top-N-Abfragen nicht explizit im Ausführungs­plan. Wenn trotz Verwendung der LIMIT-Syntax kein entsprechendes Using filesort aufscheint, erfolgt die Ausführung „am Fließband.“ Siehe „Top-N-Zeilen abfragen“.

Über den Autor

Photo of Markus Winand
Markus Winand stimmt Entwickler auf SQL-Performance ein. Er hat das Buch SQL Performance Explained veröffentlicht und bietet inhouse Schulungen sowie Tuning-Leistungen auf http://winand.at/ an.