MS SQL Server Performance: Wie verschiebt man nicht gruppierte Indizes von einer Dateigruppe in eine andere.

Aus Performance-Gründen empfiehlt es sich immer, Indizes in einer anderen Dateigruppe (Filegroup) zu speichern. Diese Dateigruppe sollte dann auf eine andere Festplatte gelegt werden als die Primary-Dateigruppe. Dadurch erhöhen sich die Zugriffe (IOs) auf die Datendateien und die Performance wird enorm gesteigert.

Dies funktioniert leider nur mit nicht gruppierten Indizes (Non-Clustered Indexes).
Genauer gesagt können oder sollten folgende Indizes nicht verschoben werden:

  1. Eindeutige Indizes (Unique Indexes)
  2. Gruppierte Indiezes (Clustered Indexes)
  3. Primärschlüssel mit gruppierten oder nicht gruppierten Indizes (Primary Keys)

Wie gehe ich vor, um nicht gruppierte Indizes in eine andere Dateigruppe zu verschieben?

Zuerst muss eine neue Dateigruppe erstellt werden. Dies erledigt man entweder im Management Studio oder mit einem Script.

Im nächsten Schritt muss noch eine Datei erstellstellt werden, die der Dateigruppe zugeordnet wird und in der die Indizes gespeichert werden.

In den Scripten müssen natürlich der Datenbankname sowie der Pfad, unter dem die Datendatei für die Indizes abgespeichert werden soll, angepasst werden. Die Größenoptionen sollten dann auch entsprechend der eigenen Datenbankgröße verändert werden.

Im letzten Schritt werden schließlich mit folgendem Script die nicht gruppierten Indizes verschoben.

Dieses Script kann jetzt entweder bei Bedarf oder einfach als Auftrag dem SQL-Agent überlassen und einmal täglich ausgeführt werden. So braucht man sich keine Gedanken mehr über die Ablage der Indizes zu machen, denn jetzt werden zum Beispiel in der Nacht alle nicht gruppierten Indizes automatisch in die richtige Dateigruppe verschoben.