Ich stimme zu mit Cade Roux .
Dieser Artikel soll Sie auf den richtigen Weg bringen:
Eine Sache zu beachten, geclusterte Indizes sollten einen eindeutigen Schlüssel (eine Identitätsspalte würde ich empfehlen) als die erste Spalte haben. Grundsätzlich hilft dies, dass Ihre Daten am Ende des Indexes eingefügt werden und nicht zu viel Festplatten-IO und Page Splits führen.
Zweitens, wenn Sie andere Indizes für Ihre Daten erstellen und diese geschickt konstruiert sind, werden sie wiederverwendet.
Stellen Sie sich z.B. vor, Sie suchen in einer Tabelle nach drei Spalten
Bundesland, Landkreis, Postleitzahl.
- Sie suchen manchmal nur nach Bundesland.
- können Sie manchmal nach Bundesland und Bezirk suchen.
- Sie können häufig nach Bundesland, Landkreis und Postleitzahl suchen.
Dann wird bei allen drei Suchvorgängen ein Index mit Bundesland, Landkreis und Postleitzahl verwendet.
Wenn Sie häufig allein nach "zip" suchen, wird der obige Index nicht verwendet (jedenfalls nicht von SQL Server), da "zip" der dritte Teil dieses Index ist und der Abfrageoptimierer diesen Index nicht als hilfreich ansieht.
Sie könnten dann einen Index nur für Zip erstellen, der in diesem Fall verwendet wird.
Übrigens Wir können uns die Tatsache zunutze machen, dass bei der mehrspaltigen Indexierung die erste Indexspalte immer für die Suche verwendet werden kann und wenn Sie nur nach "state" suchen, ist es effizient, aber nicht so effizient wie ein einspaltiger Index auf "state".
Ich schätze, die Antwort, die Sie suchen, ist, dass es von den Where-Klauseln Ihrer häufig verwendeten Abfragen und auch von Ihren Group-by's abhängt.
Der Artikel wird mir sehr helfen :-)