Heim  >  Artikel  >  Datenbank  >  Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).

Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).

青灯夜游
青灯夜游nach vorne
2020-07-07 16:04:1313072Durchsuche

Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).

1. Einführung in EXPLAIN

Mit dem Schlüsselwort EXPLAIN können Sie die Ausführung von SQL-Abfrageanweisungen durch den Optimierer simulieren, um zu erfahren, wie MySQL Ihre SQL-Anweisungen verarbeitet. Analysieren Sie die Leistungsengpässe Ihrer Abfrageanweisungen oder Tabellenstrukturen.
Durch EXPLAIN können wir die folgenden Ergebnisse analysieren:

  • Die Lesesequenz der Tabelle
  • Der Operationstyp des Datenlesevorgangs
  • Welche Indizes können verwendet werden
  • Welche Indizes werden tatsächlich verwendet?
  • Referenzen zwischen Tabellen
  • Wie viele Zeilen jeder Tabelle werden vom Optimierer abgefragt

Wird wie folgt verwendet:

EXPLAIN +SQL-Anweisung

EXPLAIN SELECT * FROM t1

Im Ausführungsplan enthaltene Informationen
Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).

2 . Die Bedeutung jedes Feldes im Ausführungsplan

2.1 id

Die Sequenznummer der Auswahlabfrage, einschließlich einer Reihe von Zahlen, die die Reihenfolge der Auswahl angeben Klauseln oder Operationstabellen werden in der Abfrage ausgeführt

id-Ergebnissen

  • id ist gleich, die Ausführung Die Reihenfolge ist von oben nach unten


    Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).
    [Zusammenfassung] Die Reihenfolge beim Laden der Tabelle ist wie in der Tabellenspalte oben dargestellt: t1 t3 t2

  • id ist anders. Wenn es sich um eine Unterabfrage handelt, erhöht sich die Seriennummer der ID. Je höher die Priorität, desto früher wird sie ausgeführt

Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).

    id ist gleich, aber unterschiedlich, und

  • Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung). existiert zur gleichen Zeit wie oben. Wie in der Abbildung gezeigt, wird die Tabelle angezeigt, wenn die ID 1 ist
    bezieht sich auf die Tabelle mit der ID 2, die die abgeleitete Tabelle der t3-Tabelle ist. <derived2></derived2>
2.2 select_type

Gemeinsame und häufig verwendete Werte sind wie folgt:


Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung). werden verwendet, um jeweils den Typ der Abfrage darzustellen, hauptsächlich zur Unterscheidung zwischen gewöhnlichen komplexen Abfragen wie Abfragen, Union-Abfragen, Unterabfragen usw.

  • EINFACH

    , Abfrage 简单的select查询不包含子查询或者UNION

  • PRIMÄR Wenn

    Unterteil abfragt, 包含任何复杂的最外层查询则被标记为PRIMARY

  • SUBQUERY

    在SELECT或WHERE列表中包含了子查询

  • DERIVED Wenn

    (Derivat) in der FROM-Liste enthalten ist, führt MySQL diese Unterabfragen rekursiv aus und ersetzt 子查询被标记为DERIVED结果放在临时表

  • UNION Wenn das zweite SELECT nach UNION erscheint, wird es als UNION markiert: Wenn UNION in der Unterabfrage der FROM-Klausel enthalten ist, wird das äußere SELECT als : DERIVED

  • UNION RESULT SELECT, um das Ergebnis aus der UNION-Tabelle abzurufen
  • 2.3-Tabelle

bezieht sich auf die aktuell ausgeführte Tabelle

2.4 Typ

Typ zeigt an, welcher Typ in der Abfrage verwendet wird. Die in Typ enthaltenen Typen umfassen die folgenden Typen:


Von den meisten Die Reihenfolge vom besten zum schlechtesten lautet: Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).

system > const > eq_ref > ref > range > index > all

Im Allgemeinen muss sichergestellt werden, dass die Abfrage mindestens die Bereichsebene und vorzugsweise die Referenz erreicht.

  • system Die Tabelle enthält nur eine Zeile mit Datensätzen (entspricht der Systemtabelle). Sie wird normalerweise nicht ignoriert >
  • bedeutet, dass der Index einmal übergeben wird. Ich habe ihn gerade gefunden und const wird verwendet, um den Primärschlüssel oder den eindeutigen Index zu vergleichen. Da nur eine Datenzeile abgeglichen wird, ist die Verarbeitung sehr schnell. Wenn Sie den Primärschlüssel in die Where-Liste einfügen, kann MySQL die Abfrage in eine Konstante umwandeln.
  • const
    Führen Sie zunächst eine Unterabfrage aus, um ein Ergebnis der temporären Tabelle d1 zu erhalten. Die Unterabfragebedingung ist id = 1, was eine Konstante ist, daher ist die ID von 1 äquivalent zur Abfrage Es gibt nur einen Datensatz, daher ist der Typ „System“. Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).
  • Einzigartiger Index-Scan, für jeden Indexschlüssel stimmt nur ein Datensatz in der Tabelle mit ihm überein. Kommt häufig bei Primärschlüssel- oder eindeutigen Index-Scans vor.
  • eq_ref
  • Nicht eindeutige Index-Scans geben jedoch alle Zeilen zurück, die mit einem einzelnen Wert übereinstimmen , werden möglicherweise mehrere übereinstimmende Zeilen gefunden, daher sollte es sich um eine Mischung aus Suchen und Scannen handeln.
  • ref
    Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).
  • Rufen Sie nur Zeilen in einem bestimmten Bereich ab. Verwenden Sie einen Index, um Zeilen auszuwählen. Die Schlüsselspalte zeigt an, welcher Index verwendet wird. In der Regel wird zwischen und < in Ihrer where-Anweisung angezeigt. ;, >, in usw. Dieser Bereichsscan-Index ist besser als ein vollständiger Tabellenscan, da er nur an einem bestimmten Punkt im Index beginnen und an einem anderen Punkt enden muss, ohne den gesamten Index zu scannen.
  • range
    Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).
  • Vollständiger Index-Scan. Der Unterschied zwischen Index und All besteht darin, dass der Indextyp nur den Indexbaum durchläuft. Dies ist normalerweise schneller als ALL, da Indexdateien normalerweise kleiner als Datendateien sind. (Das heißt, obwohl sowohl „all“ als auch „Index“ die gesamte Tabelle lesen, wird „index“ aus dem Index und „all“ von der Festplatte gelesen.)
  • index
    id ist der Primärschlüssel, also gibt es ihn ein Primärschlüsselindex Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).
  • Der vollständige Tabellenscan durchsucht die gesamte Tabelle, um passende Zeilen zu finden
  • all
    Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).
  • 2,5 mögliche_Schlüssel und Schlüssel

zeigt einen oder mehrere Indizes an, die auf diese Tabelle angewendet werden können. Wenn ein Index für das an der Abfrage beteiligte Feld vorhanden ist, wird der Index

aufgeführt, aber möglicherweise nicht tatsächlich von der Abfrage possible_keys verwendet.

key

Der tatsächlich verwendete Index. Wenn er NULL ist, wird kein Index verwendet. (Mögliche Gründe sind, dass kein Index erstellt wird oder der Index fehlschlägt)

  • Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).Wenn
  • in der Abfrage verwendet wird (das nach der Auswahl abzufragende Feld ist genau das gleiche wie das erstellte Indexfeld ), dann erscheint der Index nur in der Schlüsselliste
  • 覆盖索引
    Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).
    Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).
  • 2.6 key_len

stellt die Anzahl der im Index verwendeten Bytes dar , die über diese Spalte berechnet werden kann. Die Länge des in der Abfrage verwendeten Index in

. Der von key_len angezeigte Wert ist die maximal mögliche Länge des Indexfelds, nicht die tatsächlich verwendete Länge. Das heißt, key_len wird basierend auf der Tabellendefinition berechnet und nicht aus der Tabelle abgerufen.

不损失精确性的情况下,长度越短越好
Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).2.7 ref

Es wird die Spalte mit dem Index verwendet, vorzugsweise eine Konstante, wenn möglich. Welche Spalten oder Konstanten werden verwendet, um den Wert in der indizierten Spalte zu finden?


Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).2,8 Zeilen

Schätzen Sie anhand der Tabellenstatistik und der Indexauswahl grob die Anzahl der Zeilen, die gelesen werden müssen, um den erforderlichen Datensatz zu finden, also zu verwenden Je weniger desto besser


Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).2.9 Extra

Enthält wichtige Zusatzinformationen, die nicht für die explizite Verwendung in anderen Spalten geeignet sind

2.9.1 Filesort verwenden ( Narrow Escape)

gibt an, dass MySQL einen externen Index verwendet, um die Daten zu sortieren, anstatt sie in der Indexreihenfolge innerhalb der Tabelle zu lesen. Der Sortiervorgang, der in MySQL nicht mithilfe von Indizes durchgeführt werden kann, wird als „Dateisortierung“ bezeichnet.


2.9.2 Using temporary(十死无生)

使用了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by。
Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).

2.9.3 Using index(发财了)

表示相应的select操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错。如果同时出现using where,表明索引被用来执行索引键值的查找;如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。
Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).
Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).

2.9.4 Using where

表明使用了where过滤

2.9.5 Using join buffer

表明使用了连接缓存,比如说在查询的时候,多表join的次数非常多,那么将配置文件中的缓冲区的join buffer调大一些。

2.9.6 impossible where

where子句的值总是false,不能用来获取任何元组

SELECT * FROM t_user WHERE id = '1' and id = '2'

2.9.7 select tables optimized away

在没有GROUPBY子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。

2.9.8 distinct

优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作

3. 实例分析

Erläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).

  • 执行顺序1:select_type为UNION,说明第四个select是UNION里的第二个select,最先执行【select name,id from t2】
  • 执行顺序2:id为3,是整个查询中第三个select的一部分。因查询包含在from中,所以为DERIVED【select id,name from t1 where other_column=’’】
  • 执行顺序3:select列表中的子查询select_type为subquery,为整个查询中的第二个select【select id from t3】
  • 执行顺序4:id列为1,表示是UNION里的第一个select,select_type列的primary表示该查询为外层查询,table列被标记为<derived3></derived3>,表示查询结果来自一个衍生表,其中derived3中的3代表该查询衍生自第三个select查询,即id为3的select。【select d1.name …】
  • 执行顺序5:代表从UNION的临时表中读取行的阶段,table列的表示用第一个和第四个select的结果进行UNION操作。【两个结果union操作】

推荐学习:mysql教程

Das obige ist der detaillierte Inhalt vonErläutern Sie die Verwendung und Ergebnisanalyse in MySQL (ausführliche Erklärung).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen