Michael Schröpl: Indizes richtig verteilen

Beitrag lesen

Hi Harry,

Kennst Du ein gutes Buch, daß sich mit dem Thema beschäftig oder vielleicht gar ein gutes Tutorial zum Thema "so verteile ich meine Datenbank-Indizes richtig"?

es geht nicht darum, Indizes zu 'verteilen'.

Es geht darum, zu verstehen, über welche Zugriffspfade das RDBMS die Daten einer Tabelle für ein konkretes, einzelnes SQL-Statement adressieren kann.
Was Du also brauchst, das ist zunächst einmal die Notwendigkeit, für bestimmte (!) Zugriffe eine besonders hohe Lese-Performance zu erreichen. Bedenke, daß die Einrichtung eines zusätzlichen Indexbaums nicht nur zusätzlichen Speicherplatz kostet, sondern vor allem auch viele andere Zugriffe, nämlich das Einfügen, Löschen und Ändern von Datensätzen, langsamer macht, weil der zusätzliche Indexbaum in vielen Fällen mit angepaßt werden muß! Andererseits kann ein Index genau dieselben Operationen auch erheblich beschleunigen, weil sie alle implizit ebenfalls Queries sind ...
Indizes müssen "ihr Geld wert sein", und zwar in der Summe über sämtliche SQL-Statements gegen diese Datenbank.

Wenn Du ein konkretes Statement tunen willst, dann schau Dir die Ausgabe von EXPLAIN auf dieses Statement an - üblicherweise zeigt Dir das RDBMS hier, wie es vorgehen würde und was das ungefähr kosten könnte. Wie man dann die passenden Indexe findet, das ist zum großen Teil Übung.
Das Problem ist vor allem, daß man beim Tuning gezwungen wird, die Vorgänge einer deskriptiven Programmiersprache eben doch algorithmisch nachzuvollziehen, um die Schwachstellen bei der automatischen Code-Generierung durch das RDBMS zu finden und zu beheben.

Lesetips:

  • Beschreibung von CREATE INDEX im Handbuch Deines RDBMS
  • "Performance Tuning Guide" Deines RDBMS
  • Theoretischer Hintergrund: "Balancierte B*-Bäume" (als Suchbegriff)

Viele Grüße
      Michael

--
T'Pol: I apologize if I acted inappropriately.
V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
(sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)