Der SQL Index ermöglicht die Beschleunigung von Abfragen.
SQL Index funktioniert wie ein Begriffsregister am Ende eines Buches. Neben dem Suchbegriff stehen alle Seiten, in denen er thematisiert wird. Das ist eine deutlich effizientere Methode anstatt das komplette Buch nach dem Begriff zu durchsuchen. In regulären SQL-Abfragen wird allerdings jede Zeile nach Übereinstimmungen geprüft. Erstellt man hingegen einen SQL Index, entsteht genauso ein Verzeichnis, in dem jeder Begriff aufgelistet ist.
Alle Zeilen aus der Tabelle, die den Suchbegriff beinhalten, werden an den Begriff geknüpft. Stellt man nun eine Suchabfrage, ist die Laufzeit deutlich kürzer, da nicht mehr alle Zeilen in der Tabelle mit der Abfrage verglichen werden. Die Abfrage sucht nun nach der Stelle im Index und gleicht diese Zeilen mit der Abfrage ab.
UPDATE-, INSERT– und DELETE-Befehle dauern allerdings deutlich länger, da nach der Änderung ein neues Indexverzeichnis erstellt wird.
SQL Index erstellen
CREATE INDEX Indexname
ON Tabelle (Spalte1, Spalte2, …);
Beispiel: Ein Weltkonzern möchte seine Kundenliste statistisch auswerten. Es soll das Kaufverhalten von Kunden überprüft werden, deren Vorname mit dem Buchstaben „A“ beginnt. Die Tabelle enthält 700.000 Einträge. Bei der ersten Abfrage…
SELECT *
FROM Kunden
WHERE Vorname LIKE 'A%';
…dauerte es 5,4 Sekunden bis das Ergebnis ausgegeben wurde. Der Analyst möchte allerdings noch viel öfter Abfragen stellen, um verschiedene Business Cases zu überprüfen. Das dauert ihm zu lange, weshalb er einen Index kreiert:
CREATE INDEX vorname_index
ON Kunden (Vorname);
Dieselbe SELECT-Abfrage von zuvor dauert nun nur 0,5 Sekunden. Möchte er nun das gesamte Alphabet durchgehen, verkürzt sich die Dauer der Abfragen enorm. Es ist allerdings darauf zu achten, dass ausschließlich die Spalte „Vorname“ indexiert wurde. Trotz Index dauert die Abfrage…
SELECT *
FROM Kunden
WHERE Nachname LIKE 'A%';
… hingegen 5,1 Sekunden, da die Spalte Nachname durchsucht wird, welche nicht indexiert wurde. Solange aber der Vorname in der WHERE Bedingung mit dem AND-Operator enthalten ist, wird die Abfrage beschleunigt durchgeführt:
SELECT *
FROM Kunden
WHERE Vorname LIKE 'A%'
AND Nachname = 'Müller';
Diese Abfrage dauerte nur 0,6 Sekunden.
SQL Index erstellen mit mehreren Spalten
CREATE INDEX vorname_nachname_index
ON Kunden (Vorname, Nachname);
CREATE INDEX lässt sich auch auf mehrere Spalten beziehen. Das beschleunigt konkretere Abfragen noch weiter, wenn bei einer einzelnen Spalte immer noch zu viele Ergebnisse ausgegeben werden. Bei einer Kundenliste von mehreren Millionen Kunden, bei denen sich Vornamen extrem häufen, eignet sich der zuvor beschriebene Index. Mit diesem können spezifische Abfragen deutlich schneller ausgegeben werden:
SELECT *
FROM Kunden
WHERE Vorname = 'Max'
AND Nachname = 'Mustermann';
SQL Index löschen
Die DROP INDEX Anweisung entfernt in SQL einen bereits erstellten Index in einer Tabelle. Diese Anweisung ist allerdings in jedem System unterschiedlich:
DROP INDEX Indexname; --Oracle, DB2
DROP INDEX Tabellenname.Indexname; --SQL Server
DROP INDEX Indexname ON Tabellenname; --Microsoft Access
ALTER TABLE Tabellenname DROP INDEX Indexname; --MySQL