Gruppierter Index / Clustered Index
Bei einem gruppierten Index werden Daten basierend auf einem Index-Schlüssel organisiert. Umgesetzt wird es als eine B-Tree Struktur die schnelle Abfrage spezifischer Zeilen basierend auf Schlüsselwerten ermöglicht. Es ist nur ein Clustered Index pro Tabelle erlaubt.
Nicht-Gruppierter Index / Nonclustered Index
Ein Nicht-Gruppierter Index kann auf einer Tabelle oder Sicht basierend auf einem gruppierten Index oder dem Heap erzeugt werden. Die Daten werden basierend auf einem Index-Schlüssel und einem sog. Locator organisiert. Mit Hilfe dieses Locators kann die Position einer bestimmten Spalte im Index direkt bestimmt werden.Index-Spalten sind basierend auf dem Index-Schlüssel sortiert, die Daten selbst (außer in Kombination mit einem gruppierten Index) sind nicht zwangsläufig sortiert.
Warum werden Indizes benötigt?
Einfluss auf den SQL Server
ABFRAGE-PERFORMANZ MIT/OHNE INDEX
Beispiel: Wir möchten Informationen aus der Tabelle [SalesOrderDetails] bezüglich der Bestellung 56958 abrufen.
Select *
FROM [Sales].[SalesOderDetails]
WHERE [SaleOrderID] = 56958
Messwerte des Experiments
Experiment und Ergebnisse basierend auf der AventureWorks-Datenbank.
Ohne Index | Mit Index | |
---|---|---|
Lese-Vorgänge | 1715 | 3 |
Geschätzte CPU-Kosten | 0.133627 | 0.00016 |
Geschätzte I/O-Kosten | 1.27283 | 0.003125 |
Gute und schlechte Indizes
Was berücksichtigt ein guter Index?
Ein guter Index sollte die folgenden Aspekte berücksichtigen:
OLTP Datenbank
Indexe sollten basierend auf den entsprechend ausgewählten Spalten einer Tabelle entworfen werden.Zu viele Indexe können negativen Einfluss auf Performanz und Systemressourcen haben.Lieber ein minimale Anzahl an Indizes um die Anforderungen zu erfüllen, als zu viele.
OLAP Datenbank
Mehrere Indizes mit mehreren Schlüssel-Spalten pro Index sollten verwendet werden. Columnstore Indizes bieten sich besonders im Date-Warehouse Umfeld an.
Indexe auf den Anspruch der Arbeitslast (Workload) anpassen
Indexe für die meist-verwandtesten und teuersten Abfragen
SQL Server Index-Schlüssel Empfehlungen berücksichtigen
Daten-Verteilung der SQL Server Index-Spalten analysieren
Sortierreihenfolge der Daten beachten:
Fremd-Schlüssel für SLQ Server Indizes verwenden
SQL Server Index-Speicher beachten
Fehlende SQL Server Indizes erkennen
Immer einen gruppierten vor einem nicht-gruppierten Index erstellen
Index-Wartung und Update-Statistiken überwachen
Index-Fragmentierung | Die interne und externe Fragmentierung sollte regelmäßig überprüft werden.Dies gilt vor allem für Tabellen mit hoher Arbeitslast.Indizes mit einer Fragmentierung < 30% sollten reorganisiert werden.Indizes mit einer Fragmentierung > 30% sollten neu aufgebaut werden. |
---|---|
Ungenutzte Indizes | Ungenutzte Indizes haben negativen Einfluss auf den Abfrage-Optimierer und sollten entfernt werden.Kostet unnötige Ressourcen.Zusätzlicher Wartungs-Overhead. |
Statistik | Die Statistik sollte regelmäßig erneuert werden, auch wenn “auto-update” Statistiken verwendet werden. SQL Server Agent eignet sich die Statistik regelmäßig zu aktualisieren. |
Kontaktieren Sie uns gerne über das
Kontaktformular und vereinbaren ein unverbindliches
Beratungsgespräch mit unseren Berater:innen zur
Bedarfsevaluierung. Gemeinsam optimieren wir Ihre
Umgebung und steigern Ihre Performance!
Wir freuen uns auf Ihre Kontaktaufnahme!