SQLite Index
Ein Index ist eine spezielle Nachschlagetabelle, die die Datenbank-Suchmaschine verwendet, um den Datenabruf zu beschleunigen. Einfach ausgedrückt ist ein Index ein Zeiger auf Daten in einer Tabelle. Ein Index in einer Datenbank ist dem Index eines Buches sehr ähnlich.
Nehmen Sie die Indexseiten eines chinesischen Wörterbuchs als Analogie. Sie können das benötigte Schriftzeichen schnell mithilfe von Tabellen finden, die nach Pinyin, Strichzahl, Radikalen und so weiter sortiert sind.
Indizes beschleunigen SELECT-Abfragen und WHERE-Klauseln, aber sie verlangsamen die Dateneingabe bei Verwendung von UPDATE- und INSERT-Anweisungen. Indizes können erstellt oder gelöscht werden, ohne die Daten zu beeinträchtigen.
Verwenden Sie die CREATE INDEX-Anweisung, um einen Index zu erstellen. Sie ermöglicht es Ihnen, den Index zu benennen, die Tabelle und die Spalte oder Spalten anzugeben, die indiziert werden sollen, und anzugeben, ob der Index in aufsteigender oder absteigender Reihenfolge ist.
Indizes können auch eindeutig sein, ähnlich dem UNIQUE-Constraint, wodurch doppelte Einträge in einer Spalte oder einer Kombination von Spalten verhindert werden.
CREATE INDEX-Befehl
CREATE INDEXDie grundlegende Syntax lautet wie folgt:
CREATE INDEX index_name ON table_name;
Einspaltiger Index
Ein Einspaltenindex ist ein Index, der nur für eine Spalte einer Tabelle erstellt wird. Die grundlegende Syntax lautet wie folgt:
CREATE INDEX index_name ON table_name (column_name);
Eindeutiger Index
Die Verwendung eines eindeutigen Index dient nicht nur der Leistung, sondern auch der Datenintegrität. Ein eindeutiger Index lässt nicht zu, dass doppelte Werte in die Tabelle eingefügt werden. Die grundlegende Syntax lautet wie folgt:
CREATE UNIQUE INDEX index_name on table_name (column_name);
Zusammengesetzter Index
Ein zusammengesetzter Index ist ein Index, der für zwei oder mehr Spalten einer Tabelle erstellt wird. Die grundlegende Syntax lautet wie folgt:
CREATE INDEX index_name on table_name (column1, column2);
Ob ein Einspaltenindex oder ein zusammengesetzter Index erstellt werden sollte, hängt von den Spalten ab, die Sie sehr häufig in der WHERE-Klausel als Abfragefilterbedingungen verwenden.
Wenn nur eine Spalte verwendet wird, wählen Sie einen Einspaltenindex. Wenn zwei oder mehr Spalten häufig in der WHERE-Klausel als Filter verwendet werden, wählen Sie einen zusammengesetzten Index.
Impliziter Index
Implizite Indizes werden vom Datenbankserver automatisch erstellt, wenn Objekte erstellt werden. Indizes werden automatisch für PRIMARY KEY-Constraints und UNIQUE-Constraints erstellt.
Beispiel
Nachfolgend ein Beispiel. Wir erstellen einen Index auf der Spalte salary der Tabelle COMPANY:
sqlite> CREATE INDEX salary_index ON COMPANY (salary);
Nun lassen Sie uns den Befehl.indicesoder.indexesverwenden, um alle verfügbaren Indizes der Tabelle COMPANY aufzulisten, wie unten gezeigt:
sqlite> .indices COMPANY
Dies erzeugt das folgende Ergebnis, wobeisqlite_autoindex_COMPANY_1der implizite Index ist, der beim Erstellen der Tabelle angelegt wurde.
salary_index sqlite_autoindex_COMPANY_1
Sie können alle Indizes in der Datenbank wie folgt auflisten:
sqlite> SELECT * FROM sqlite_master WHERE type = 'index';
DROP INDEX-Befehl
Ein Index kann mit SQLitesDROP-Befehl entfernt werden. Besondere Vorsicht ist beim Löschen eines Indexes geboten, da sich die Leistung entweder verschlechtern oder verbessern kann.
Die grundlegende Syntax lautet wie folgt:
DROP INDEX index_name;
Mit der folgenden Anweisung können Sie den zuvor erstellten Index löschen:
sqlite> DROP INDEX salary_index;
Wann sollten Indizes vermieden werden?
Obwohl der Zweck von Indizes darin besteht, die Datenbankleistung zu verbessern, gibt es mehrere Situationen, in denen Indizes vermieden werden sollten. Beachten Sie die folgenden Richtlinien bei der Verwendung von Indizes:
Indizes sollten nicht für kleine Tabellen verwendet werden.
Indizes sollten nicht für Tabellen verwendet werden, bei denen häufig umfangreiche Aktualisierungs- oder Einfügevorgänge stattfinden.
Indizes sollten nicht für Spalten verwendet werden, die eine große Anzahl von NULL-Werten enthalten.
Indizes sollten nicht für Spalten verwendet werden, die häufig manipuliert werden.