Heim  >  Artikel  >  Datenbank  >  Wie hoch sind die Kosten für das Erstellen, Löschen und Verwenden von MySQL-Indizes?

Wie hoch sind die Kosten für das Erstellen, Löschen und Verwenden von MySQL-Indizes?

王林
王林nach vorne
2023-06-03 15:55:03785Durchsuche

    1. Erstellung und Löschung von Indizes in MySQL

    Innodb- und Myisam-Engines werden automatisch der Primärschlüssel sein oder haben EINZIGARTIGE Attributspalten werden indiziert.

    Wenn Sie andere Spalten indizieren möchten, müssen Sie dies explizit angeben.

    1. Erstellen Sie beim Erstellen einer Tabelle einen Index.

    CREATE TABLE 表名 (
        各个列的信息...,
        (KEY/INDEX) 索引名 (需要被索引的单个列或多个列)
    )

    Beachten Sie, dass entweder KEY oder INDEX als Synonyme verwendet werden können.

    Fügen Sie beispielsweise beim Erstellen der Tabelle index_demo einen gemeinsamen Index für die Spalten c2 und c3 hinzu:

    CREATE TABLE index_demo(
        c1 INT,
        c2 INT,
        c3 CHAR(1),
        PRIMARY KEY(c1),
        INDEX idx_c2_c3 (c2, c3)
    );

    Der Name des hier erstellten Index ist idx_c2_c3 Der Name kann beliebig sein. Es wird empfohlen, idx_ als Präfix zu verwenden, gefolgt vom Spaltennamen des wieder aufzunehmenden Indexes und mehreren durch Unterstriche getrennten Spalten.

    2. Fügen Sie einen Index hinzu, wenn Sie die Tabellenstruktur ändern.

    ALTER TABLE 表名 ADD (KEY/INDEX) 索引名 (需要被索引的单个列或多个列);

    3. Löschen Sie den Index, wenn Sie die Tabellenstruktur ändern Der erstellte Index idx_c2_c3 kann wie folgt geschrieben werden:

    ALTER TABLE 表名 DROP (KEY/INDEX) 索引名;

    2. Die Kosten des Index

    Obwohl Indizes eine gute Sache sind, können sie nicht beliebig erstellt werden.

    1. Die Platzkosten

    Das ist sehr offensichtlich.

      Jedes Mal, wenn ein Index erstellt wird, muss ein B+-Baum dafür erstellt werden.
    • Jeder Knoten jedes B+-Baums ist eine Datenseite, die standardmäßig 16 KB Speicherplatz belegt.
    • Ein großer B+-Baum besteht aus vielen Datenseiten.
    • Das wird also viel Speicherplatz beanspruchen.

    2. Zeitaufwand

    Zeitaufwändig, um die Reihenfolge beizubehalten

    Beim Hinzufügen, Löschen oder Ändern von Daten in der Tabelle ist eine Änderung erforderlich jeder B+-Baumindex.

    Wir wissen:

      B+ Die Knoten auf jeder Ebene im Baum bilden eine doppelt verknüpfte Liste in aufsteigender Reihenfolge der Indexspaltenwerte. .
    • Ob es sich um einen Blattknoten oder einen internen Knoten handelt, die internen Datensätze sind nach dem Wert der Indexspalte geordnet und bilden eine einfach verknüpfte Liste.
    • Daher kann beim Hinzufügen, Löschen oder Ändern von Vorgängen die Sortierung von Knoten und Datensätzen beschädigt werden und die Speicher-Engine benötigt zusätzliche Zeit, um Seiten aufzuteilen und zu recyceln usw. Vorgang zur Aufrechterhaltung der Reihenfolge von Knoten und Datensätzen.

    Wenn viele Indizes erstellt werden, können Sie sich vorstellen, dass der B+-Baum, der jedem Index entspricht, entsprechende Wartungsvorgänge durchlaufen muss, was zu einem hohen Verbrauch führt.

    Zeitaufwändige Ausführungsplananalyse

    Vor der Ausführung der Abfrageanweisung wird zunächst ein Ausführungsplan generiert.

    Im Allgemeinen verwendet eine Abfrageanweisung während der Ausführung höchstens einen sekundären Index. Beim Generieren des Ausführungsplans müssen Sie die Kosten für die Verwendung verschiedener Indizes zum Ausführen der Abfrage berechnen und schließlich den niedrigsten auswählen . Index für Abfrage.

    Wenn zu viele Indizes erstellt werden, dauert die Kostenanalyse möglicherweise zu lange, was sich auf die Ausführungsleistung von Abfrageanweisungen auswirkt.

    Das obige ist der detaillierte Inhalt vonWie hoch sind die Kosten für das Erstellen, Löschen und Verwenden von MySQL-Indizes?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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