Verständnisfragen Indizierung

25/01/2010 - 08:35 von Paul Schmidinger | Report spam
Hallo,

ich habe einige grundlegende Fragen zur Sinnhaftigkeit von bestimmten
Indizes, die ich bisher nicht ergoogeln konnte, obwohl (weil?) sie mir
trivial erscheinen. Es geht mir mal rein um die SELECT-Leistung und
*nicht* um entstehende Nachteile durch Indizes (Zeit für
Indexaktualisierung, Speicherplatz...). Nehmen wir mal an es geht um
Tabellen mit 30.000 rows, und die Spalten wàren INT, nicht unique, im
Wertebereich 0-5000. Ich hoffe diese Angaben genügen, um *halbwegs*
brauchbare Antworten zu finden:

1. Es gibt Abfragen mit WHERE A3 AND Bx9, aber auch welche nur mit
WHERE A3. Bietet sich ein Index über A, B an? Macht ein zusàtzlicher
Index nur über A Sinn? Vermutung: ja, nein.

2. Macht es für den SQL-Server bzgl. Performance einen Unterschied ob
ich WHERE A3 and Bx9 oder WHERE Bx9 AND A3 schreibe?
Vermutung: nein.

3. Bei einer Abfrage mit WHERE A3 AND Bx9: Nützt es der Abfrage,
wenn es bereits einzelne Indizes über A und B gibt? Kann es trotzdem
Sinn machen einen Index über BEIDE Felder zu machen? Vermutung: ja, ja.

4. Kann es Fàlle geben, in denen zusàtzlich zu einem Index über A, B
auch ein Index B, A sinnvoll ist? Vermutung: kA

5. Ist ein zusàtzlicher Index über A ist sinnlos, wenn es bereits einen
clustered PK über A gibt? Vermutung: ja.

6. Index über mehrere Spalten: In welcher Reihenfolge gebe ich die
Spalten an? Vermutung: Ich beginne mit den Spalten, die das erwartete
Ergebnis am stàrksten einschrànken. Das bringt dann primàr allen Afragen
etwas, die alle verwendeten Spalten im WHERE verwenden.

7. Bringt ein Index A, B für eine Abfrage WHERE Bx9 etwas? Vermutung:
nein.

Über Literaturempfehlungen freue ich mich auch...

LG, Paul Schmidinger
 

Lesen sie die antworten

#1 Christoph Muthmann
25/01/2010 - 11:12 | Warnen spam
Paul Schmidinger wrote:
Hallo,

ich habe einige grundlegende Fragen zur Sinnhaftigkeit von bestimmten
Indizes, die ich bisher nicht ergoogeln konnte, obwohl (weil?) sie mir
trivial erscheinen. Es geht mir mal rein um die SELECT-Leistung und
*nicht* um entstehende Nachteile durch Indizes (Zeit für
Indexaktualisierung, Speicherplatz...). Nehmen wir mal an es geht um
Tabellen mit 30.000 rows, und die Spalten wàren INT, nicht unique, im
Wertebereich 0-5000. Ich hoffe diese Angaben genügen, um *halbwegs*
brauchbare Antworten zu finden:

1. Es gibt Abfragen mit WHERE A3 AND Bx9, aber auch welche nur
mit WHERE A3. Bietet sich ein Index über A, B an? Macht ein
zusàtzlicher Index nur über A Sinn? Vermutung: ja, nein.

2. Macht es für den SQL-Server bzgl. Performance einen Unterschied ob
ich WHERE A3 and Bx9 oder WHERE Bx9 AND A3 schreibe?
Vermutung: nein.

3. Bei einer Abfrage mit WHERE A3 AND Bx9: Nützt es der Abfrage,
wenn es bereits einzelne Indizes über A und B gibt? Kann es trotzdem
Sinn machen einen Index über BEIDE Felder zu machen? Vermutung: ja,
ja.
4. Kann es Fàlle geben, in denen zusàtzlich zu einem Index über A, B
auch ein Index B, A sinnvoll ist? Vermutung: kA

5. Ist ein zusàtzlicher Index über A ist sinnlos, wenn es bereits
einen clustered PK über A gibt? Vermutung: ja.

6. Index über mehrere Spalten: In welcher Reihenfolge gebe ich die
Spalten an? Vermutung: Ich beginne mit den Spalten, die das erwartete
Ergebnis am stàrksten einschrànken. Das bringt dann primàr allen
Afragen etwas, die alle verwendeten Spalten im WHERE verwenden.

7. Bringt ein Index A, B für eine Abfrage WHERE Bx9 etwas?
Vermutung: nein.

Über Literaturempfehlungen freue ich mich auch...



Hallo Paul,
Du scheinst schon auf einem recht guten Weg zu sein. Bei 1,2,3,5 liegst Du
meiner Meinung nach richtig.

Zu 4 & 6 & 7: Die Reihenfolge der Spalten richtet sich zum einen nach der
Selektivitàt, zum anderen aber auch danach, ob die Felder mit = oder > (o.
à.) eingeschrànkt werden. Die = Felder kommen zuerst. Ein Index kann aber
auch mehrere Anforderungen (WHERE + GROUP oder WHERE + JOIN) abdecken. Dann
würden auch mal Indizes A, B und B, A Sinn machen. Manche Leute legen aber
nur einzelne Indizes an und vertrauen darauf, dass der Optimizier diese
kombinieren kann. Ich tendiere auch eher zu zusammengesetzten Indizes.

Es gibt viele Informationen zu Index-Strategien:
http://www.google.de/search?q=sql+s...strategies

Eine habe ich jetzt mal rausgegriffen:
http://www.sql-server-performance.c...al_p1.aspx

Auf jeden Fall hilft es so etwas auszuprobieren und die Ausführungsplàne
anzuschauen, oder den Datenbankmodul-Optimierungsratgeber anzuwerfen, bzw.
für eine fertige Anwendung die Missing-Indizes anzeigen zu lassen.
http://www.sql-server-performance.c...Vs_p1.aspx
Identify Missing Indexes Using SQL Server DMVs


Einen schönen Tag noch,
Christoph
Microsoft SQL Server MVP
http://www.insidesql.org

Ähnliche fragen