Hauptmenü

Untermenü

Advanced MySQL - Indizes

1. Der tiefe Sinn

Ein Index wird immer dann gesetzt, wenn man etwas schnell finden möchte. Ein schönes Beispiel dafür findet man in Geschichtsbüchern. Nur heißt der dort Register. Da gibt es dann zum Beispiel das Namens- und Sachregister. Dort kann man schnell nach Personen oder Ereignissen suchen und findet dann die Seiten, auf denen dazu etwas steht.

Ein "natürliches" Beispiel

Der Mensch wird allgemein als vernunftbegabtes Wesen bezeichnet, auch wenn man da ab und zu Zweifel bekommt. Speziell bei unserem Fernsehprogramm. Aber egal. Nehmen wir mal an, wir suchen im Kölner Telefonbuch nach einer Person. Da es mit Sicherheit deutlich über 300.000 Einträge gibt, geht man strategisch vor. Sucht man nach Zimmermän, so fängt man definitiv hinten an, bei einem "Müller" dagegen grob in der Mitte.

2. Indexarten bei MySQL

Hier gibt es vier verschiedene Möglichkeiten, die sich auch aus der Art des Feldtyps ergeben.

PRIMARY KEY

Auch wenn ich mich dazu schon lang und breit ausgelassen habe, wiederhole ich kurz noch mal das Wichtigste. Der Primärschlüssel dient zur eindeutigen Identifizierung eines Datensatzes innerhalb einer Tabelle. Dabei handelt es sich normalerweise um einen automatisch hoch zählenden numerischen Wert.

UNIQUE KEY

Hier darf im entsprechenden Feld nur ein eindeutiger Datensatz pro Tabelle vorhanden sein.

INDEX/KEY

Bei diesem Index werden einfach gesagt die Inhalte der entsprechenden Felder als Ganzes erfasst und separat von MySQL verwaltet.

FULLTEXT KEY

Im Gegensatz zu INDEX erfolgt hier die Erfassung über einzelne Wörter.

3. Anwendungsmöglichkeiten

PRIMARY KEY

Den muss man nicht unbedingt setzen, sollte es meiner Meinung nach aber immer bei Tabellen mit "echten" Inhalten tun. Also alle, wo nicht nur Relationen abgebildet werden. Und wo sehr oft Änderungen zu erwarten sind.

UNIQUE KEY

Der empfiehlt sich zum Beispiel bei einem Login-System, wo man keine gleich lautenden Benutzernamen erlauben möchte. Wegen der berühmten "Passwort vergessen"-Sache. Auch bei Relationstabellen kann man damit sehr gut arbeiten.

INDEX

Für diese Art von Index habe ich oben schon das schöne Beispiel mit dem Telefonbuch genannt. Wenn man also Felder mit relativ kurzen alphanumerischen Inhalten hat, die sich obendrein noch selten ändern, so ist INDEX eure Wahl.

FULLTEXT

Nomen est omen. Hiermit kann man eine ganz dolle Volltextsuche umsetzen. Aber es sollte wirklich viel Text sein. Denn je größer die Anzahl der einzelnen Wörter ist, desto präziser wird das Ergebnis. Anders herum gesagt bedeutet es auch, dass man mit ein paar Pisselwörtern pro Feld nur Müll bekommt.

4. Mehrere Felder als Index definieren.

Das ist jederzeit möglich. Allerdings sollte man dabei auf einen Primärschlüssel mit AUTO_INCREMENT verzichten, da der eh einzigartig ist. Allerdings muss man auf ein paar Besonderheiten achten. Wenn man einen PRIMARY KEY oder UNIQUE KEY auf mehrere Spalten legt, so gilt die Einzigartigkeit für alle(!) Felder in Kombination.

Und bei der Wahl von INDEX und FULLTEXT sollte man sehr vorsichtig sein. Denn wenn sich in einem Feld etwas ändert, so muss der gesamte Index neu aufgebaut werden. Daraus folgt, je mehr Felder, desto länger dauert es. Auf die Details werde ich in den kommenden Tutorials eingehen.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt