Composite Indexes

By Frank Kalis

Posted on Jul 25, 2006 von in SQL Server

Ein Zusammengesetzter Index ist ein Index, der aus mehr als einer Spalte besteht. In manchen Fällen ist ein Zusammengesetzter Index auch ein Covering Index. Quick Tips zu Covering Indizes finden sich hier. Verallgemeinert gesprochen sollten Zusammengesetzte Indexes (mit Ausnahme von Covering Indexes) vermieden werden, da solche Indexes typischerweise sehr breit sind und damit mehr I/O Operationen verursachen, was zu Lasten der Performance geht.

Einer der Hauptgründe für die Verwendung von zusammengesetzten Indexes ist es, einen Index selektiver zu machen. Ein vielfach besserer Weg jedoch ist es, das Datenbankdesign zu verbessern, anstatt Zusammengesetzte Indexes zu erstellen.

*****

Hat man keine andere Wahl, als einen zusammengesetzten Index zu erstellen, sollte man diesen so klein wie möglich halten. Dies reduziert die Größe des Index und damit die Anzahl an I/O Operationen, um den Index zu lesen.

*****

Im allgemeinen ist ein zusammengesetzter Index nur dann hilfreich, wenn die WHERE Klausel die Spalte anspricht, die als erste im Index vorkommt. Angenommen, man hat einen Index auf "City, State", dann wird eine Abfrage wie "WHERE City = 'Springfield'" den Index verwenden, während die Abfrage "WHERE STATE = 'MO'" den Index kaum verwenden kann.

*****

Abre auch wenn die WHERE Klausel einer Abfrage nicht die erste Spalte eines vorhandenen Index anspricht (was normalerweise die Verwendung des index ausschließt), kann dieser Index unter gewissen Umständen dennoch verwendet werden. Und zwar dann, wenn der zusammengesetzte Index alle Spalten enthält, die in der Abfrage referenziert werden, da in diesem Fall der zusammengesetzte Index gleichzeitig auch ein Covering Index ist.

*****

Erstellt man einen zusammengesetzten Index, spielt die Anordnung der Spalten im Index eine wichtige Rolle. Als erste Spalte sollte die mit der größten Selektivität gewählt werden. Grund hierfür liegt darin, daß der Optimierer unter Umständen den Index nicht berücksichtigt, wenn die erste Spalte eine geringe Selektivität ausweist.

*****

Manchmal ist es eine gute Idee, einen zusammengesetzten Index in mehrere Indexes mit jeweils einer Spalte aufzuteilen. SQL Server speichert Statistiken nur für die erste Spalte eines Index und wenn diese Spalte nicht sehr selektiv ist, kann es sein, daß der Index nicht verwendet wird. Hat man aber den Index in mehrere kleinere autgeteilt, werden Statistiken für jede dieser Spalten gespeichert und der Optimierer verfügt über bessere Informationen, um seine Entscheidung treffen zu können. Ferner kann SQL Server mehrere einzelne Indexes miteinander verbinden, um eine bessere Gesamtperformance zu erreichen. Dabei gilt aber stets, im Einzelfall zu überprüfen, ob die Aufteilung eines Zusammengesetzten Index in einzelne Indexes den gewünschten Effekt hat.

*****

SQL Server erstellt automatisch einen Index für PRIMARY KEY und UNIQUE Constraints. Sind dabei zwei oder mehr Spalten involviert, sollte man überprüfen, in welcher Reihenfolge SQL Server die Spalten angeordnet hat und lieber manuell diese festlegen als dies von SQL Server automatisch erledigen zu lassen. Dadurch hat man bessere Kontrolle darüber, daß die selektivste Spalte als erste definiert ist.

*****

Tags: Tags:
Dieser Eintrag wurde eingetragen von und ist abgelegt unter SQL Server. Tags: ,

Noch kein Feedback


Formular wird geladen...