English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本教程中,您将学习如何在表上创建索引以提高数据库性能。
索引是与表相关联的数据结构,它基于一个或多个列(索引键)中的值提供对表中行的快速访问。
假设您的数据库中有一个customers表,并且您想使用以下语句找出名字是以字母A开头的所有客户。
SELECT cust_id, cust_name, address FROM customers WHERE cust_name LIKE 'A%';
Um solche Kunden zu finden, muss der Servercustomersdurch das Zeilenweise Scannen der Tabelle und das Überprüfen des Inhalts der Namensspalte. Obwohl dies für Tabellen mit nur wenigen Zeilen funktioniert, stellen Sie sich vor, wie lange es dauern könnte, eine Anfrage zu beantworten, wenn die Tabelle eine Million Zeilen enthält. In diesem Fall können Sie die Verarbeitungsgeschwindigkeit beschleunigen, indem Sie Indizes auf die Tabelle anwenden.
Sie können Indizes mit folgenden CREATE INDEX-Anweisungen erstellen:
CREATE INDEX index_name ON table_name (column_name);
Zum Beispiel, um im Kunden表nameUm Indizes auf einer Spalte zu erstellen, können Sie:
CREATE INDEX cust_name_idx ON customers (cust_name);
Standardmäßig ermöglichen Indizes wiederholte Einträge und sortieren die Einträge in aufsteigender Reihenfolge. Um einzigartige Indexeinträge zu erfordern, fügen Sie nach CREATE den Schlüsselwort UNIQUE hinzu, wie folgt:
CREATE UNIQUE INDEX cust_name_idx ON customers (cust_name);
In MySQL können Sie spezifische Indizes auf einer Tabelle anzeigen, wie folgt:
mysql> SHOW INDEXES FROM customers \G
Tipp:Verwenden Sie \G anstelle von Semikolon (;) zur Beendigung von SQL-Anweisungen. Wenn die Ergebnisse für das aktuelle Fenster zu breit sind, werden die Ergebnisse in einer vertikalen Anzeige anstatt im Standardtabellenformat angezeigt.
Sie können auch Indizes über mehrere Spalten erstellen. Zum Beispiel, wenn Sie in der Datenbank eine Tabelle namensder Benutzermit den Spaltenfirst_nameundlast_nameWenn Sie diese Spalten häufig aufrufen, können Sie eine auf zwei Spalten basierende Indizes erstellen, um die Leistung zu verbessern, wie im folgenden Diagramm gezeigt:
CREATE INDEX user_name_idx ON users (first_name, last_name);
Tipp:Sie können Datenbankindizes als Indexabschnitt eines Buches betrachten, um Ihnen zu helfen, schnell spezifische Themen im Buch zu finden oder zu lokalisieren.
Indizes sollten vorsichtig erstellt werden. Da jede Änderung, die in einer Tabelle hinzugefügt, aktualisiert oder gelöscht wird, auch alle Indizes in dieser Tabelle ändern muss, führt eine höhere Anzahl von Indizes zu mehr Arbeit für den Server, was letztlich zu einer Leistungseinbusse führt.
Hier sind einige grundlegende Regeln, die bei der Erstellung von Indizes befolgt werden können:
Erstellen Sie Indizes für Spalten, die Sie häufig zur Datenretrieval verwenden.
Erstellen Sie keine Indizes für Spalten, die nie als Suchschlüssel verwendet wurden.
Indizes, die zur Verbesserung der Verbindungsleistung verwendet werden.
Vermeiden Sie es, Spalten mit zu vielen NULL-Werten zu enthalten.
Gleichzeitig ist eine Indizierung für kleine Tabellen nicht erforderlich, da in diesem Fall die Server-Tabellenabfrage in der Regel schneller ist als eine Vorabprüfung der Indizes.
Hinweis:Bei der Erstellung einer Tabelle erstellen die meisten Datenbank-Systeme (wie MySQL, SQL Server usw.) automatisch Indizes für die TabellePRIMÄRER SCHLÜSSELundUNIQUESpalte Index erstellen.
Sie können die folgenden Anweisungen verwenden, um nicht mehr benötigte Indizes zu löschen.
DROP INDEX index_name ON table_name;
Die folgenden Anweisungen werden den IndexcustomersTabellenindex löschencust_name_idx。
DROP INDEX cust_name_idx ON customers;
Darüber hinaus, wennTabelle löschen,Dadurch werden auch alle damit verbundenen Indizes gelöscht.
Warnung:Bevor Sie einen Index löschen, sollten Sie überprüfen, welche Auswirkungen dies haben wird. Als allgemeine Faustregel sollten Sie Indexe niemals blind erstellen oder löschen.