In diesem Tutorial werden wir einige der Grundlagen der Indizierung behandeln. Als Teil der MySQL-Reihe werden wir die Möglichkeiten der MySQL-Indizierung und die Rolle, die sie bei der Optimierung der Datenbankleistung spielt, vorstellen. Liquid Web empfiehlt, sich mit einem DBA zu beraten, bevor Sie Änderungen an Ihrer Anwendung auf Produktionsebene vornehmen.
Was ist Indizierung?
Die Indizierung ist eine leistungsstarke Struktur in MySQL, die genutzt werden kann, um die schnellsten Antwortzeiten auf häufige Abfragen zu erhalten. MySQL-Abfragen erzielen Effizienz, indem sie eine kleinere Tabelle, Index genannt, aus einer bestimmten Spalte oder einem Satz von Spalten generieren. Diese Spalten, die als Schlüssel bezeichnet werden, können verwendet werden, um die Eindeutigkeit zu erzwingen. Unten sehen Sie eine einfache Visualisierung eines Beispielindexes mit zwei Spalten als Schlüssel.
+------+----------+----------+
| ROW | COLUMN_1 | COLUMN_2 |
+------+----------+----------+
| 1 | data1 | data2 |
+------+----------+----------+
| 2 | data1 | data1 |
+------+----------+----------+
| 3 | data1 | data1 |
+------+----------+----------+
| 4 | data1 | data1 |
+------+----------+----------+
| 5 | data1 | data1 |
+------+----------+----------+
Abfragen verwenden Indizes, um die Zieldaten zu identifizieren und abzurufen, selbst wenn es sich um eine Kombination von Schlüsseln handelt. Ohne einen Index führt die Ausführung derselben Abfrage zu einer Überprüfung jeder Zeile auf die erforderlichen Daten. Die Indizierung erzeugt eine Abkürzung mit viel schnelleren Abfragezeiten bei umfangreichen Tabellen. Eine Analogie aus Lehrbüchern kann eine weitere gängige Methode darstellen, um zu visualisieren, wie Indizes funktionieren.
Wann soll die Indizierung aktiviert werden?
Die Indizierung ist nur für große Tabellen mit regelmäßig abgerufenen Informationen von Vorteil. Zum Beispiel, um mit unserer Schulbuchanalogie fortzufahren, es macht wenig Sinn, ein Kinderbuch mit nur einem Dutzend Seiten zu indizieren. Es ist effizienter, einfach das Buch zu lesen, um jedes Vorkommen des Wortes „Schildkröte“ zu finden, als Indizes einzurichten und zu pflegen, nach diesen Indizes abzufragen und dann jede bereitgestellte Seite zu überprüfen. In der Computerwelt stellen diese zusätzlichen Aufgaben im Zusammenhang mit der Indexierung verschwendete Ressourcen dar, die besser sinnvoll wären, wenn sie nicht indexiert würden.
Wenn Tabellen ohne Indizes zu enormen Ausmaßen anwachsen, leiden die Antwortzeiten unter Abfragen, die auf diese unübersichtlichen Tabellen abzielen. Ineffiziente Abfragen äußern sich in Latenz bei der Anwendungs- oder Websiteleistung. Wir identifizieren diese Latenz üblicherweise mithilfe der langsamen Abfrageprotokollfunktion von MySQL. Weitere Einzelheiten zur Verwendung der Protokollfunktion für langsame Abfragen finden Sie im ersten Artikel dieser Reihe:MySQL-Leistung:Identifizieren langer Abfragen.
Sobald eine kolossale Tabelle ihren Wendepunkt erreicht, erreicht sie das Potenzial für Ausfallzeiten für Anwendungen und Websites . Die Durchführung routinemäßiger Auswertungen für wachsende Datenbanken stellt eine optimale Datenbankleistung sicher und umgeht die Unterbrechungen durch lange Abfragen.
Vor- und Nachteile der MySQL-Indizierung
Es gibt Vor- und Nachteile bei der Verwendung der MySQL-Indizierung, und wir werden die wesentlichen Vor- und Nachteile für Sie erörtern. Anhand dieser Aspekte können Sie entscheiden, ob die Indexierung für Ihre Situation die richtige Wahl ist.
Welche Informationen indexiert man?
Die Auswahl, was indiziert werden soll, ist wahrscheinlich der schwierigste Teil beim Indizieren Ihrer Datenbanken. Bestimmen, was wichtig genug ist, um indiziert zu werden, und was harmlos genug ist, um nicht indiziert zu werden. Im Allgemeinen funktioniert die Indizierung am besten mit den Spalten, die Gegenstand der WHERE-Klauseln in Ihren häufig ausgeführten Abfragen sind. Betrachten Sie die folgende vereinfachte Tabelle:
ID, TITLE, LAST_NAME, FIRST_NAME, MAIDEN_NAME, DOB, GENDER, AGE, DESCRIPTION, HISTORY, ETC...
Wenn Ihre Abfragen darauf angewiesen sind, die WHERE-Klausel mit LAST_NAME und FIRST_NAME zu testen, würde die Indizierung nach diesen beiden Spalten die Abfrageantwortzeiten erheblich verlängern. Wenn Ihre Abfragen alternativ auf einer einfachen ID-Suche beruhen, wäre die Indizierung nach ID die bessere Wahl.
Diese Beispiele sind lediglich ein rudimentäres Beispiel, und es gibt mehrere Arten von Indizierungsstrukturen, die in MySQL integriert sind. Die folgende MySQL-Seite behandelt diese Arten von Indizes ausführlicher und ist eine empfohlene Lektüre für alle, die eine Indizierung in Betracht ziehen:How MySQL Uses Indexes
Was ist ein eindeutiger Index?
Ein weiterer zu berücksichtigender Punkt bei der Bewertung, welche Spalten als Schlüssel in Ihrem Index dienen sollen, ist die Verwendung der UNIQUE-Einschränkung. Das Festlegen der Einschränkung UNIQUE erzwingt die Eindeutigkeit basierend auf dem konfigurierten Indizierungsschlüssel. Wie bei jedem Schlüssel kann dies eine einzelne Spalte oder eine Verkettung mehrerer Spalten sein. Die Funktion dieser Einschränkung stellt sicher, dass es aufgrund des konfigurierten Schlüssels keine doppelten Einträge in der Tabelle gibt.
Was ist ein Primärschlüsselindex?
Der PRIMARY KEY wird ebenso häufig aufgerufen wie die UNIQUE-Einschränkung, um Indizes zu optimieren. Diese Einschränkung stellt sicher, dass der bezeichnete PRIMARY KEY keinen Nullwert haben kann. Infolgedessen tritt beim Ausführen auf einer InnoDB-Speicher-Engine für die betreffende Tabelle eine Leistungssteigerung auf. Dieser Schub ist darauf zurückzuführen, wie InnoDB Daten physisch speichert und Zeilen mit Nullwerten im Schlüssel außerhalb der zusammenhängenden Reihenfolge mit Zeilen mit Werten platziert. Durch Aktivieren dieser Einschränkung wird sichergestellt, dass die Zeilen der Tabelle für schnellere Antworten in zusammenhängender Reihenfolge gehalten werden.
Indizes verwalten
Jetzt werden wir einige der Grundlagen der Manipulation von Indizes mit der MySQL-Syntax behandeln. In Beispielen werden wir das Erstellen, Löschen und Auflisten von Indizes einbeziehen. Beachten Sie, dass diese Beispiele Platzhaltereinträge für die spezifischen Schlüsselwörter enthalten. Diese Schlüsselwörter sind von Natur aus selbsterklärend, um sie leicht lesen zu können, und unten finden Sie eine Übersicht darüber.
Auflisten/Anzeigen von Indizes
Tabellen können mehrere Indizes haben. Die Verwaltung von Indizes erfordert zwangsläufig die Möglichkeit, die vorhandenen Indizes in einer Tabelle aufzulisten. Die Syntax zum Anzeigen eines Index ist unten.
SHOW INDEX FROM tableName;
Indizes erstellen
Die Indexerstellung hat eine einfache Syntax. Die Schwierigkeit besteht darin, zu bestimmen, welche Spalten indiziert werden müssen und ob die Durchsetzung der Eindeutigkeit erforderlich ist. Unten zeigen wir, wie man Indizes mit und ohne PRIMARY KEY und UNIQUE Constraints erstellt.
Wie bereits erwähnt, können Tabellen mehrere Indizes haben. Die Mehrfachindizierung ist nützlich, um Indizes zu erstellen, die auf die von Ihrer Anwendung oder Website geforderten Abfragen abgestimmt sind. Die Standardeinstellungen erlauben bis zu 16 Indizes pro Tabelle, erhöhen Sie diese Zahl, ist aber im Allgemeinen mehr als nötig. Indizes können während der Erstellung einer Tabelle erstellt oder später als zusätzliche Indizes zur Tabelle hinzugefügt werden. Wir gehen unten auf beide Methoden ein.
Beispiel:Erstellen Sie eine Tabelle mit einem Standardindex
CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
INDEX ( ID )
);
Beispiel:Erstellen Sie eine Tabelle mit eindeutigem Index und Primärschlüssel
CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
PRIMARY KEY (ID),
UNIQUE INDEX ( ID )
);
Beispiel:Einen Index zu einer bestehenden Tabelle hinzufügen
CREATE INDEX indexName ON tableName (ID, LName, FName, LOC);
Beispiel:Index zu bestehender Tabelle mit Primärschlüssel hinzufügen
CREATE UNIQUE INDEX indexName ON tableName (ID, LName, FName, LOC);
Indizes löschen
Beim Verwalten von Indizes kann es erforderlich sein, einige zu entfernen. Das Löschen von Indizes ist ebenfalls ein sehr einfacher Vorgang, siehe Beispiel unten:
DROP INDEX indexName ON tableName;
Es gibt viele Möglichkeiten, Ihre Datenbank für echte Effizienz zu optimieren. Wenn Sie mehr erfahren oder die in MySQL verfügbaren Suchmaschinentypen konvertieren möchten, lesen Sie unser MyISAM vs. InnoDB-Tutorial. Oder wenn Sie hochfunktionale Datenbanken benötigen, sehen Sie sich unsere MySQL-Produktseite an, um verschiedene Optionen anzuzeigen.