Heim  >  Artikel  >  Datenbank  >  Was ist der Ausführungsplan in MySQL?

Was ist der Ausführungsplan in MySQL?

青灯夜游
青灯夜游Original
2022-11-11 18:17:035516Durchsuche

In MySQL ist der Ausführungsplan eine Reihe von Tools, die Benutzern von der Datenbank bereitgestellt werden, um SQL-Anweisungen zu analysieren, zu analysieren und zu optimieren. Die Funktionen des Ausführungsplans sind: 1. Anzeige der Lesereihenfolge der Tabelle; 3. Anzeige der tatsächlich verwendeten Indizes; Die Referenzbeziehung zwischen ihnen; 6. Zeigt die Anzahl der abgefragten Zeilen in jeder Tabelle an.

Was ist der Ausführungsplan in MySQL?

Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.

Beim Abfragen der Datenbank verwenden wir normalerweise SQL-Anweisungen, um die benötigten Daten abzufragen. Wir wissen jedoch nicht, wie SQL in der Datenbank ausgeführt wird, ob es Indizes verwendet, welche Indizes verwendet werden, welche Felder und Tabellen durchsucht werden, wie ihre Reihenfolge ist, wie viel Zeit sie in Anspruch nehmen usw. Gibt es also welche? Wie können wir diese Informationen sehen? MySQL stellt uns eine Reihe von Tools zur Verfügung – Ausführungspläne.

1. Was ist ein Ausführungsplan?

Der Ausführungsplan ist eine Reihe von Tools, die von der Datenbank zum Parsen, Analysieren und Optimieren von SQL-Anweisungen bereitgestellt werden. Er verfügt über die folgenden Funktionen:

  • Tabellenlesesequenz anzeigen ;

  • Typ der Datenleseoperation;

  • Welche Indizes werden tatsächlich verwendet?

  • Die Anzahl der Zeilen, nach denen abgefragt wird jeder Tisch.

  • Hinweis: Der Ausführungsplan ist nur der beste Optimierungsreferenzplan, der von der Datenbank für SQL bereitgestellt wird, und es ist nicht unbedingt die optimale Lösung, das heißt:

    Vertrauen Sie dem Ausführungsplan nicht zu sehr
  • 2 . So verwenden Sie den Ausführungsplan

Verwendung Der Ausführungsplan ist sehr einfach. Fügen Sie einfach das Schlüsselwort „explain“ vor der auszuführenden SQL hinzu. 3. Informationen zum Ausführungsplan Zeilen, gefiltert, Extra.

3.1, ID

Wählen Sie die Seriennummer aus, die ID ist dieselbe, die Ausführungsreihenfolge ist von oben nach unten; je größer der ID-Wert, desto höher die Priorität, desto früher wird ausgeführt;

3.2, select_type

Was ist der Ausführungsplan in MySQL?

select_type: Stellt den Typ der Select-Anweisung dar, die die folgenden Werte haben kann;

SIMPLE: Stellt eine einfache Abfrage dar, die keine Verbindungsabfrage und ⼦ Abfrage enthält ;

PRIMARY: Stellt die Hauptabfrage oder die am weitesten entfernte Abfrageanweisung dar;

UNION: Stellt die zweite oder nachfolgende Abfrageanweisung der Verbindungsabfrage dar; in UNION hängt von der externen Abfrageabfrage ab;

UNION-ERGEBNIS: Das Ergebnis der Join-Abfrage;

  • SUBQUERY: ⼦Die erste SELECT-Anweisung in der Abfrage;

  • ABHÄNGIGE UNTERABFRAGE: ⼦Die 1. SELECT Anweisung in der Abfrage, abhängig von der externen Abfrage;

  • DERIVED: SELECT (Unterabfrage der FROM-Klausel). 3.3, Tabelle ;

  • < ;derivenN>: Gibt an, dass die Abfragebedingung eine Unterabfrage ist;

  • : Zeigt an, dass Tabelle 1 und Tabelle 2 Union verwenden.

  • 3.4, Partitionen
  • Partitionen: passende Partitionen.
  • 3.5, Typ

Typ: Diese Spalte stellt den Tabellenzuordnungstyp oder Zugriffstyp dar, dh die Datenbank bestimmt, wie Zeilen in der Tabelle gefunden werden und wie groß der ungefähre Bereich der Datenzeilendatensätze ist. Vom besten zum schlechtesten sind es: system > eq_ref > ref > index > die Systemtabelle, die vom Typ const ist. Die speziellen Spalten werden normalerweise nicht angezeigt und können ignoriert werden.

const: Ein Treffer durch den Index, der einer Datenzeile entspricht, daher sehr schnell Abfragen von PRIMARY KEY- oder UNIQUE-Indizes können so verstanden werden, dass const die Optimierung ist , dies ist möglicherweise der beste Join-Typ neben const;
  • Bereich: Nur Zeilen in einem bestimmten Bereich abrufen, einen Index zum Auswählen von Zeilen verwenden, im Allgemeinen für Abfragen wie zwischen, , in usw. verwendet. Diese Bereichsabfrage ist besser als ein Index, da dies nur erforderlich ist Scannen Sie den Index an einem Punkt und enden Sie an einem anderen Punkt.

  • Index: muss den Indexbaum durchlaufen Anfang bis Ende. Normalerweise erfordert dies das Hinzufügen von Indizes zur Optimierung.

  • Hinweis: Wenn Sie SQL optimieren, müssen Sie mindestens auf Bereich optimieren. Es wird empfohlen, auf ref zu optimieren, vorzugsweise auf const.

  • 3.6, mögliche_Schlüssel

    mögliche_Schlüssel: Diese Spalte zeigt, welche Indizes von der Abfrage zum Suchen verwendet werden können. Bei der Erklärung kann es vorkommen, dass „possible_keys“ eine Spalte enthält, der Schlüssel jedoch „NULL“ anzeigt. Dies liegt daran, dass die Tabelle nicht viele Daten enthält und die Datenbank denkt, dass der Index für diese Abfrage nicht hilfreich ist, und daher einen vollständigen Index auswählt Tabellenabfrage.

    Wenn die Spalte NULL ist, gibt es keinen zugehörigen Index. In diesem Fall können Sie die Where-Klausel überprüfen, um zu sehen, ob Sie einen geeigneten Index zur Verbesserung der Abfrageleistung erstellen können, und dann EXPLAIN verwenden, um die Auswirkung zu sehen.


    3.7, Schlüssel

    Schlüssel: Zeigt den Schlüssel (Index) an, für dessen Verwendung in der Datenbank tatsächlich entschieden wurde. Wenn kein Index ausgewählt ist, ist der Wert des Schlüssels NULL. Die Verwendung von Indizes kann erzwungen oder ignoriert werden.

    3.8, key_lenkey_len: Diese Spalte zeigt die Anzahl der von der

    Datenbank im Index verwendeten Bytes. Mithilfe dieses Werts können Sie berechnen, welche Spalten im Index konkret verwendet werden:

    String-Typ

    char(n): n Bytes Länge varchar(n): 2 Bytes Speicherzeichenfolgenlänge, wenn es utf-8 ist, beträgt die Länge 3n + 2

    Numerischer Typ

    tinyint: 1 Byte
    smallint: 2 Bytes
    int: 4 Bytes

    bigint: 8 Bytes


    Zeittyp
    Datum: 3 Bytes
    Zeitstempel: 4 Bytes
    Datum/Uhrzeit: 8 Bytes

    Wenn das Feld NULL zulässt, ist 1 Byte erforderlich, um aufzuzeichnen, ob NULL ist

    Hinweis : Die maximale Indexlänge beträgt 768 Byte. Wenn die Zeichenfolge zu lang ist, führt die Datenbank einen ähnlichen Vorgang wie beim linken Präfixindex durch und extrahiert die erste Hälfte der Zeichen zur Indizierung.

    3.9, ref

    ref: Diese Spalte zeigt die Spalte oder Konstante , die die -Tabelle nach dem Wert im Index des Schlüsselspaltendatensatzes sucht: const (Konstante), func, null, Feldname (Beispiel: film.id)

    3.10, Zeilen

    Zeilen: Diese Spalte ist die Anzahl, die die Datenbank zum Lesen und Scannen schätzt. Beachten Sie, dass dies nicht die Nummer des Ergebnissatzes ist . Je kleiner der Wert, desto besser.

    3.11, gefiltert

    gefiltert: Die Anzahl der als Ergebnis zurückgegebenen Zeilen macht den Prozentsatz der Anzahl der gelesenen Zeilen aus, je größer der Wert, desto besser.

    3.12, Extra

    extra: In dieser Spalte werden

    zusätzliche Informationen angezeigt, d erste Übereinstimmung⾏ Beenden Sie danach die Suche nach weiteren Zeilen für die aktuelle Zeilenkombination Die vorherige Zeile. Durch die Zeilenkombination werden weitere Zeilen in der Tabelle überprüft vorherige Tabelle Der Wert ist bekannt und einige Indizes können verwendet werden;

    mit Dateisortierung (Schlüsselpunkt): Die Datenbank verwendet einen externen Index, um die Ergebnisse zu sortieren, anstatt Zeilen aus der Tabelle in Indexreihenfolge zu lesen. Zu diesem Zeitpunkt durchsucht MySQL alle geeigneten Datensätze entsprechend dem Verbindungstyp, speichert die Sortierschlüsselwörter und Zeilenzeiger, sortiert dann die Schlüsselwörter und ruft die Zeileninformationen der Reihe nach ab. In diesem Fall muss im Allgemeinen darüber nachgedacht werden,

    Indizes zur Optimierung zu verwenden; bedeutet, dass select einen abdeckenden Index verwendet, ohne zur Tabelle zurückkehren zu müssen ;

    • mit temporärer (Hervorhebung): Die Datenbank muss

      eine temporäre Tabelle erstellen, um die Abfrage zu verarbeiten
    • , diese Situation kommt häufig vor Sortieren nach und Gruppieren nach. In diesem Fall muss normalerweise zunächst ein Index zur Optimierung verwendet werden. Dabei wird Folgendes verwendet: Die Datenbank wird gefiltert, nachdem die Speicher-Engine die Zeilen abgerufen hat. Das heißt, zuerst die gesamten Daten zu lesen und dann anhand der Where-Bedingung zu prüfen. Wenn sie übereinstimmen, werden sie beibehalten, und wenn sie nicht übereinstimmen, werden sie verworfen.
    • Verwendung der Indexbedingung: Ähnlich wie bei Using wobei die abgefragte Spalte nicht vollständig vom Index abgedeckt wird und die Where-Bedingung der Bereich einer führenden Spalte ist
    • using sort_union(...), Using union(...), Using intersect(.. .): Diese Funktionen veranschaulichen, wie Index-Scans für index_merge-Join-Typen zusammengeführt werden
    • Verwendung eines Index für Gruppierung nach: Ähnlich wie bei der Methode „Verwendung eines Index“ für den Zugriff auf eine Tabelle bedeutet die Verwendung eines Index für Gruppierung nach, dass die Datenbank einen Index gefunden hat, der zum Abfragen aller Spalten der Gruppe nach oder eindeutiger Abfragen ohne verwendet werden kann zusätzlich Durchsuchen Sie die Festplatte, um auf die tatsächliche Tabelle zuzugreifen.

    • null: Die abgefragte Spalte wird nicht vom Index abgedeckt, und die Where-Filterbedingung ist die führende Spalte des Index, was bedeutet, dass der Index verwendet wird, aber einige Felder werden nicht vom Index abgedeckt und müssen über „ „Um dies zu erreichen, wird der Index nicht nur verwendet, noch wird der Index überhaupt verwendet. Auch wenn der Index verwendet wird, ist eine Tabellenrückgabeoperation erforderlich. Der Tabellenrückgabevorgang sollte vermieden werden.

    【Verwandte Empfehlungen: MySQL-Video-Tutorial

    Das obige ist der detaillierte Inhalt vonWas ist der Ausführungsplan in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn