SQL Practice Blog – SQL Server, BizTalk und .NET Erfahrungen

SQL Server 2008: Filtered Index

leave a comment »

Seit dem SQL Server in der Version 2008 gibt es ein neues Feature namens Filtered Index. Filtered Index ist eine Möglichkeit nur einen Teil der Zeilen einer Tabelle in einem Index zu integrieren. Somit ist es quasi möglich den Index mit einer WHERE Klausel einzuschränken. Dies kann die Performance des eines Index nennenswert erhöhen, wenn sich meine Suchabfragen immer in feste Bereiche einteilen lassen.

Welches Beispiele wäre dafür geeignet? Nehmen wir zum Beispiel an, das wir eine Tabelle mit Bestellungen haben. Diese Bestellungen können je einen Status von Offen, Bezahlt oder Storniert haben. Wenn sich meine Abfragen regelmäßig an diesen drei Zuständen orientieren, so kann ich drei kleinere Indizes erstellen, welche die Abfragen beschleunigen.

Wie lautet der Syntax?

image

Die Umsetzung ist denkbar einfach, ich erstelle einen nicht gruppierten Index auf eine Spalte, in meinem Beispiel ist das die Spalte ID, danach schränke ich in der WHERE Klausel den Index auf die gültigen Daten-sätze ein. Jetzt erstelle ich jeweils noch einen Index für den Status Bezahlt und Storniert. Gehe ich nun davon aus das meine Abfragen den jeweiligen Status der Bestellung beinhalten, so kann der Abfragenoptimierer automatisch den geeigneten Index auswählen.

Welche Einschränkungen gibt es?

Der Filtered Index hat einige Einschränkungen, die da wären:

– Er funktioniert nur mit einem NONCLUSTERED INDEX
– Er kann nicht für FULL TEXT Indizes genutzt werden
– Er kann nur bei Views genutzt werden, wenn diese persistiert sind

Fazit

Führt man eine Abfrage mit einer Einschränkung auf die Statusspalte aus, so wird automatisch der geeignet Index gewählt. Da der ausgewählte Index nicht mehr alle Zeilen der Tabelle beinhaltet, ist er in der Abfrage entsprechend performanter. Dies sieht man, wenn man die Abfragepläne der Abfrage mit und ohne Filtered Index vergleicht.

Written by Robert Meyer

Januar 29, 2010 um 00:41

Veröffentlicht in SQL Server

Tagged with , , , , ,

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: