Rouven: INDEXies bei MySQL

Beitrag lesen

Hallo,

also ich schließe mich da vom "Anwendungs-PROGRAMMIERER"-Standpunkt Tom an. Wie die Datenbank den Index schön ausbalanciert hat den Entwickler der Datenbank zu interessieren, nicht aber den Entwickler AUF der Datenbank.
Der Index ist eine Methode zur Beschleunigung des Datenbankzugriffs, wie sinnvoll oder nicht sinnvoll die Indizierung von Ja/Nein-Werten ist mag eine Frage sein, nichts desto trotz ist es in einem bestimmten Kontext durchaus auch sinnvoll Spalten mit redundanten Inhalten zu indizieren. Das Beispiel mit dem Telefonbuch finde ich schon sehr passend:
Natürlich hast du recht, wenn ich 10 Leute Namens "Hans Meier" habe, dann ist ein Index darauf erst einmal sinnlos, die Suche würde alle Datensätze zurückgeben, erst über Einbeziehen der Telefonnummer kann ich die Sätze unterscheidbar machen. Aber jetzt nehmen wir mal die Anwendung, die auf dieser Datenbank (das gesamte Telefonbuch) arbeitet: Die wird doch in 99,99% aller Fälle einfach die Telefonnummer nicht kennen, mit ein Wenig Glück gibt der Mensch zwar noch den Vornamen ein, aber unter Umständen gibt er sogar nur den Namen an:
SELECT name, vorname, telefonnummer FROM telefonbuch
WHERE name = 'Meier'
ORDER BY name, vorname

Was würde man jetzt hier mit dem Index machen? 1,5er-lei:

  1. Dafür sorgen, dass die Datenbank alle Menschen mit Nachnamen Meier schnell findet, egal ob die dahinter Vornamen haben die unterschiedlich sind oder nicht, das ist dem abfragenden Programm egal, es will schnell seine Ergebnisse.
    1,5) ggf. die Sortierung nach name und vorname beschleunigen, auch hier interessiert es niemanden, wenn der Index über die Telefonnummer die Sätze unterscheiden kann, was habe ich davon, die ist da ja gar nicht drin.

Was ich in diesem Bereich gelernt und in der Praxis bisher erfahren habe ist, dass man Indizes auf Spalten braucht auf denen man häufig lesend (sortierend) mit den Datensätzen arbeitet. Und damit gibt es zunächst mal kein Kriterium von der Datenbank um eine Spalte zu indizieren, sondern nur Kriterien von der Anwendungsseite.

Meine Meinung, Hugh, ich habe gesprochen ;-)

MfG
Rouven

--

-------------------
ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(