Freitag, Januar 11, 2013

Zu viele Indizes

Jonathan Lewis hat in seinem Blog einen älteren, aber immer noch relevanten Artikel zum Thema Over-indexing erneut veröffentlicht. Hier ein paar zentrale Punkte daraus:
  • Indizierung von Foreign Key-Spalten: ein solcher Index dient der Vermeidung von lock (und deadlock) Problemen beim Update des zugehörigen Satzes in der Parent-Tabelle, da ohne den Index ein table lock erforderlich ist.
    • Wenn es solche Fälle des Updates von Parent-Sätzen nicht gibt, dann benötigt man auch keinen Index (sofern er nicht zur Beschleunigung von Query-Zugriffen relevant ist)..
    • Außerdem kann ein vorhandener Index zur Vermeidung des Lock-Problems verwendet werden, wenn er die Constraint-Spalte(n) als führende Spalte(n) enthält - wobei die Reihenfolge irrelevant ist.
    • zusammengesetzte Indizes lassen sich durch eine geeignete Wahl der Spaltenreihenfolge gut komprimieren: Spalten mit vielen Wiederholungen sollten im Index vorne stehen (was natürlich nur gilt, wenn es keine anderen Gründe gibt, die eine andere Reihenfolge nahelegen: z.B. die Verwendung einer Spalte in sehr vielen unterschiedlichen Zugriffen, was dafür spräche, diese Spalte an den Anfang des Index zu stellen).
  • ein Index auf trunc(update_date) kann mehrere Probleme mit sich bringen: einerseits kann er ein klassischer Fall für rebuilds sein (weil die blocks am linken Rand des Index im Fall massiver Update-Operationen allmählich fast, aber nicht ganz leer werden), andererseits wird er (wahrscheinlich) einen sehr schlechten CF entwickeln (sofern die Updates über die gesamte Tabelle verteilt sind) - und daher nicht unbedingt effektiv sein.

Keine Kommentare:

Kommentar veröffentlichen