Gibt es eine Möglichkeit, die Arbeit des Optimierers in MySQL zu verfolgen?

7

Genau wie die MEMO-Struktur in SQL Server, die eine Art "Papierspur" von Schritten darstellt, die der Optimierer bei der Optimierung der Abfrage unternimmt. Gibt es irgendetwas in MySQL, über das ich Informationen wie die vom Optimierer berücksichtigten Pläne und die Kosten für jeden Plan abrufen kann?

zli89
quelle

Antworten:

9

Die aktuelle Version 5.6 hat diese Funktion hinzugefügt.

Siehe: MySQL Internals Manual :: Kapitel 9. Verfolgen des Optimierers

Typische Verwendung:

# Turn tracing on (it's off by default):
SET optimizer_trace="enabled=on";

SELECT ...; # your query here

SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;

# possibly more queries...

# When done with tracing, disable it:
SET optimizer_trace="enabled=off";

Sie können es in SQL-Fiddle in Aktion sehen . Ich bin mir nicht sicher, wie die Ausgabe verschönert werden kann.

ypercubeᵀᴹ
quelle
+1 für die Verwendung der neuen Tabelle information_schema für MySQL 5.6.
RolandoMySQLDBA
1

Das Beste, was ich sofort erwähnen kann, ist, EXPLAIN einfach für eine Abfrage auszuführen.

Es gibt eine grafische Möglichkeit, dies zu tun

Für Schritte zur Optimierung einer Abfrage wird ein Analysebaum erstellt. Anstatt den Parser hier zu erklären, lesen Sie bitte meinen Beitrag vom 11. März 2013 ( Gibt es einen Ausführungsunterschied zwischen einer JOIN-Bedingung und einer WHERE-Bedingung? ), Was der Parser tut.

RolandoMySQLDBA
quelle