English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MySQL Indizes

Der Aufbau von MySQL-Indizes ist für die effiziente Laufzeit von MySQL sehr wichtig, da Indexe die Suchgeschwindigkeit von MySQL erheblich verbessern können.

Man kann sich vorstellen, dass ein MySQL mit gut gestalteten und verwendeten Indexen wie einem Lamborghini ist, während ein MySQL ohne Indexgestaltung und -verwendung wie ein menschlicher Dreiradwagen ist.

Man kann sich das Verzeichnis einer chinesischen Wörterbuch-Homepage (Index) vorstellen, mit dem man nach Pinyin, Strichen, Büchstabenkombinationen usw. sortierten Verzeichnissen (Indizes) schnell das gesuchte Wort finden kann.

Indexe gibt es in Form von Einzelfeldindizes und Kombinationsindizes. Ein Einzelfeldindex enthält nur ein einzelnes Feld, eine Tabelle kann mehrere Einzelfeldindizes haben, dies ist jedoch kein Kombinationsindex. Ein Kombinationsindex enthält mehrere Felder.

Bei der Erstellung eines Indexes müssen Sie sicherstellen, dass dieser Index auf die Bedingungen der SQL-Abfrageanweisung angewendet wird (normalerweise als WHERE-Klauselbedingung).

Tatsächlich ist ein Index auch eine Tabelle, die die Primärschlüssel und Indexfelder speichert und auf die Zeilen der physischen Tabelle verweist.

Bisher wurde über die Vorteile der Verwendung von Indexen gesprochen, aber übermäßige Verwendung von Indexen kann zu Missbrauch führen. Daher haben Indexe auch ihre Nachteile: Obwohl Indexe die Abfragegeschwindigkeit erheblich verbessern, verringern sie gleichzeitig die Geschwindigkeit der Aktualisierung des Tables, wie INSERT, UPDATE und DELETE. Denn bei der Aktualisierung des Tables muss MySQL nicht nur die Daten, sondern auch die Indexdatei speichern.

Der Erstellung eines Indexes wird Speicherplatz für ein Indexdatei benötigt.

Regelmäßiger Index

Index erstellen

Das ist der grundlegendste Index, der keine Beschränkungen aufweist. Es gibt folgende Arten, ihn zu erstellen:

CREATE INDEX indexName ON table_name (column_name)

Für CHAR und VARCHAR-Typen kann die Länge kleiner als die tatsächliche Feldlänge sein; für BLOB- und TEXT-Typen muss length angegeben werden.

Tabellenstruktur ändern (Index hinzufügen)

ALTER table tableName ADD INDEX indexName(columnName)

Bei der Erstellung der Tabelle direkt spezifizieren

CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
INDEX [indexName] (username(length))  
 
);

Syntax zum Löschen eines Indexes

DROP INDEX [indexName] ON mytable;

Eindeutiger Index

Es ist ähnlich wie der vorherige normale Index, der Unterschied ist jedoch: Der Wert der Indexspalte muss eindeutig sein, aber es dürfen Leerwerte vorhanden sein. Wenn es sich um einen Kombinationsindex handelt, muss die Kombination der Spaltenwerte eindeutig sein. Es gibt folgende Arten der Erstellung:

Index erstellen

CREATE UNIQUE INDEX indexName ON mytable(username(length))

Tabellenstruktur ändern

ALTER table mytable ADD UNIQUE [indexName] (username(length))

Bei der Erstellung der Tabelle direkt spezifizieren

CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
UNIQUE [indexName] (username(length))  
 
);

Indizes hinzufügen und löschen mit dem ALTER-Befehl

Es gibt vier Möglichkeiten, Indizes in einer Datenbanktabelle hinzuzufügen:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): Diese Anweisung fügt eine Primärschlüssel hinzu, was bedeutet, dass der Indexwert eindeutig sein muss und NULL nicht zulassen kann.

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): Die Werte des Indexes müssen eindeutig sein (außer NULL, das möglicherweise mehrmals vorkommt).

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list): Ein normaler Index, bei dem der Indexwert mehrmals auftreten kann.

  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):Diese Anweisung spezifiziert, dass der Index als FULLTEXT verwendet wird, was eine Volltextindizierung bedeutet.

Nachfolgendes Beispiel zeigt, wie man einen Index in einer Tabelle hinzufügt.

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

Sie können auch den DROP-Ausdruck im ALTER-Befehl verwenden, um Indizes zu löschen. Versuchen Sie folgenden Beispiel, um einen Index zu löschen:

mysql> ALTER TABLE testalter_tbl DROP INDEX c;

Hinzufügen und Löschen von Primärschlüsseln mit dem ALTER-Befehl

Der Primärschlüssel wirkt sich auf die Spalte(n) aus (kann eine Spalte oder mehrere Spalten als Primärschlüssel kombiniert werden), und wenn Sie den Primärschlüsselindex hinzufügen, müssen Sie sicherstellen, dass der Primärschlüssel standardmäßig nicht leer ist (NOT NULL). Beispiel unten:

mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

Sie können auch den Befehl ALTER verwenden, um den Primärschlüssel zu löschen:

mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;

Wenn Sie den Primärschlüssel löschen, müssen Sie nur PRIMARY KEY angeben, aber wenn Sie den Index löschen, müssen Sie den Indexnamen kennen.

Indexinformationen anzeigen

Sie können den Befehl SHOW INDEX verwenden, um die mit der Tabelle verbundenen Indexinformationen aufzulisten. Sie können \G hinzufügen, um die Ausgabe zu formatieren.

Versuchen Sie folgenden Beispiel:

mysql> SHOW INDEX FROM table_name; \G
........