n 1-Feld-Indizes vs. 1 n-Feld Index

01/11/2008 - 11:24 von Thomas Winkler | Report spam
Hi,

Szenario: Eine Tabelle mit den Feldern A, B, C und D soll für den
schnellstmöglichen Zugriff optimiert werden. Dabei sei der Mehrverbrauch
an Speicherplatz zunàchst einmal egal.

Im ersten Fall soll mit

WHERE B=X AND C=Y

gefiltert werden. In einem anderen mit

WHERE B=X AND C=Y AND D=Z

Gibt es Unterschiede in der Performance wenn man

a) jeweils einen Index auf B, einen auf C und einen auf D legt?
b) einen Index gemeinsam für B und C
c) einen Index gemeinsam für B, C und D
d) einen Index gemeinsam für B und C und einen einzelnen für D

Wie sieht es jetzt mit dem Speicherplatz-Mehrverbrauch für die Fàlle a)
bis d) aus?

Thomas
 

Lesen sie die antworten

#1 Thomas Möller
01/11/2008 - 12:08 | Warnen spam
Hallo Thomas,

Thomas Winkler schrieb:
Szenario: Eine Tabelle mit den Feldern A, B, C und D soll für den
schnellstmöglichen Zugriff optimiert werden. Dabei sei der Mehrverbrauch
an Speicherplatz zunàchst einmal egal.

Im ersten Fall soll mit

WHERE B=X AND C=Y

gefiltert werden. In einem anderen mit

WHERE B=X AND C=Y AND D=Z

Gibt es Unterschiede in der Performance wenn man

a) jeweils einen Index auf B, einen auf C und einen auf D legt?
b) einen Index gemeinsam für B und C
c) einen Index gemeinsam für B, C und D
d) einen Index gemeinsam für B und C und einen einzelnen für D

Wie sieht es jetzt mit dem Speicherplatz-Mehrverbrauch für die Fàlle a)
bis d) aus?



wenn Du einen gemeinsamen Index auf die Spalten B, C und D legst, dann
werden IMHO damit die oben genannten WHERE-Bedingungen beide bestens
unterstützt.

Zum Thema Performance:
IMHO gilt prinzipiell der Grundsatz so viele Indices wird nötig, so
wenig Indices wie möglich. Hierbei ist aber die jeweilige Situation in
der jeweiligen Anwendung zu berücksichtigen.
Beim Einfügen und Aktualisieren von Daten müssen alle Indices
aktualisiert werden. Das kostet Zeit. Wenn Du also eine Anwendung hast,
in der viele Daten eingefügt oder aktualisiert werden dann können zu
viele Indices die Performance etwas bremsen. IMHO wirkt such das aber
nur bei großen Datenmengen wirklich aus.
Wenn Du hingegen einen Anwendung hast, in der die Daten nur einmal
eingelesen werden und der wesentliche Zweck darin besteht, die Daten in
bestimmten Konstellationen wieder auszulesen, dann kann Dir die
zeitliche Verzögerung beim Schreiben der Daten egal sein, da dies nur
ein einziges mal erfolgt.

Grundsàtzliche würde ich sagen, dass ein gemeinsamer Index performanter
ist als die Kombination mehrerer einzelner Indices. Wenn Du zusàtzlich
den gemeinsamen Index zum Primàrschlüssel machst, dann wird daraus ein
Clustered Index und die Daten werden in dieser Reihenfolge gespeichert.
Das sollte die Performance noch ein wenig verbessern.

Schau Dir bitte in diesem Zusammenhang auch noch den Vortrag mit dem
Titel "Performance-Tuning in Tabellen und Abfragen" von Michael
Zimmermann nàher an. Du findest ihn bei www.donkarl.com auf den
Downloadseiten zur 8. AEK.

CU
Thomas

Homepage: www.Team-Moeller.de

Ähnliche fragen