MySQL-EXPLAIN-Pläne und Zugriffspfade prüfen

Fügen Sie einen bereits von MySQL erzeugten Plan ein: FORMAT=JSON, einen EXPLAIN-ANALYZE-Baum oder die kopierte Konsolentabelle. Die Seite listet Zugriffsart, gewählten Schlüssel und geschätzte Zeilen je Tabelle und markiert Full Scans, temporäre Tabellen und Filesort. Es wird nichts an eine Datenbank gesendet und keine Anweisung ausgeführt.

Läuft lokal in deinem Browser
Alles wird im Browser verarbeitet; nichts wird gesendet.
MySQL-EXPLAIN-AusgabeFügen Sie EXPLAIN FORMAT=JSON, einen EXPLAIN-ANALYZE-Baum, ein tabulatorgetrenntes Ergebnis oder eine MySQL-Konsolentabelle ein.
JSON-, Tabellen- oder BaumeingabeSchätzwerte benötigen ProduktionskontextKeine Datenbankverbindung

Dies ist eine schreibgeschützte Planprüfung: Es wird keine Abfrage ausgeführt und kein SQL an MySQL gesendet.

Zugriffszeilen
Noch keine Zugriffszeilen zur Anzeige.

Einen MySQL-Plan aus der EXPLAIN-Ausgabe lesen

Fügen Sie einen Plan ein, den Sie bereits aus MySQL haben: die FORMAT=JSON-Ausgabe, einen EXPLAIN-ANALYZE-Baum oder die Konsolentabelle des mysql-Clients. Die Seite listet jede gefundene Tabelle mit Zugriffsart, gewähltem Schlüssel und geschätzten Zeilen und markiert vollständige Tabellenscans, temporäre Tabellen und Filesort. Alles läuft im Browser: Es wird keine Anweisung ausgeführt und nichts an eine Datenbank gesendet.

Die Analyse liest die drei Formen, die MySQL selbst ausgibt, und erfindet keine Zahlen: Fehlt eine Zeilenschätzung, steht — in der Spalte statt 0. Schätzwerte stammen aus den Statistiken des Servers und sind die Annahme des Planers, keine Messung der Abfrage.

  1. Führen Sie EXPLAIN in MySQL aus und kopieren Sie das ganze Ergebnis: EXPLAIN FORMAT=JSON für den JSON-Plan, EXPLAIN ANALYZE oder EXPLAIN FORMAT=TREE für den Baum, oder die einfache EXPLAIN-Tabelle aus der Konsole.
  2. Fügen Sie es in das Feld ein und klicken Sie auf Lokal analysieren. Beispiel laden füllt das Feld mit einem JSON-Plan über zwei Tabellen, der eine Unterabfrage im table-Objekt behält.
  3. Lesen Sie zuerst die fünf Zähler: Zugriffszeilen, geschätzte Zeilen, Full Scans, Zugriffe mit Schlüssel und Indexscans.
  4. Arbeiten Sie die Hinweise durch: ALL-Zugriff, vollständiger Indexscan, temporäre Tabelle, Filesort und Zwischenergebnisse werden jeweils mit der zugehörigen Tabelle genannt.
  5. Prüfen Sie in der Tabelle unten den gewählten Schlüssel und die Extra-Spalte (mögliche Schlüssel, Join-Puffer, angehängte Bedingung) und klicken Sie auf Kopieren, um den Bericht in ein Ticket zu übernehmen, bevor Sie einen Index ändern.

Was die Analyse zeigt – und was sie nicht sehen kann

Zeilen, Schlüssel und die Bedeutung der Zähler

Zugriffszeilen zählt die Tabelleneinträge, die die Analyse im Plan gefunden hat, nicht die Zeilen, die die Abfrage berührt; ein Eintrag ist eine Zeile in der Tabelle unten. Geschätzte Zeilen summiert die lesbaren rows_examined_per_scan- (oder rows-) Werte und zeigt —, wenn kein Eintrag eine Zahl enthält. Full Scans zählt die Zugriffsart ALL, Indexscans zählt INDEX, und Zugriffe mit Schlüssel zählt die Einträge, bei denen tatsächlich ein Schlüssel gewählt wurde.

Die Tabelle behält die Sprache des Plans: Zugriffsart, gewählter Schlüssel, gefiltert und eine Extra-Spalte, die mögliche Schlüssel nennt, wenn keiner gewählt wurde, dazu Join-Puffer oder angehängte Bedingung. possible_keys ist eine Kandidatenliste und kein gewählter Index, deshalb steht sie nie in der Spalte für den gewählten Schlüssel.

JSON, Baum und Konsolenausgabe

MySQL 8 legt Unterabfragen und materialisierte Views in das table-Objekt (attached_subqueries, materialized_from_subquery). Die Analyse steigt hinein, sodass eine innere Tabelle als eigene Zeile erscheint, und ein Self-Join, der dieselbe Tabelle zweimal scannt, wird zweimal gemeldet statt zusammengefasst.

Die Baumasgabe von EXPLAIN ANALYZE wird Zeile für Zeile gelesen (Table scan, Index scan, Index range scan, Index lookup …); trägt der Baum tatsächliche Zeilen, zeigt die Seite sie neben der Schätzung. Die Konsolenausgabe wird als tabulator- oder pipegetrennte Spalten gelesen, die Tabelle des mysql-Clients kann also direkt eingefügt werden. Pläne mit mehr als 250 Zugriffszeilen werden nach der 250. Zeile abgeschnitten und der Bericht sagt das.

Grenzen: ein Plan, ein Moment

Die Seite kann sich nicht mit MySQL verbinden: Sie führt die Abfrage nicht aus, sieht weder Schema noch Statistiken und kann nicht sagen, ob der Server diesen Plan weiterhin wählen würde. Ein Plan ohne ANALYZE enthält nur Schätzungen, und ein Plan aus einer anderen MySQL-Version kann Schlüssel oder Zugriffsarten nennen, die diese Seite nicht kennt.

Zwischen Läufen wird nichts gespeichert: Eine neue Analyse ersetzt Zähler, Hinweise, Tabelle und Bericht, und Text, der kein EXPLAIN-Plan ist, leert die Bereiche, statt einen alten Bericht stehen zu lassen, den Kopieren übernehmen könnte. Der Bericht wiederholt Format, Zähler und jeden Hinweis, damit die Notizen mit den Zahlen wandern.

Zuletzt verwendet: