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