SQL Server Performance Indizes optimieren – Fehlende Indizes (Missing Index)
Werden Sie und Ihre Anwendungen durch den SQL Server ausgebremst? Sind es schlechte Abfragen, die die Performance Ihrer Anwendungen ausbremsen? Bevor Sie sich professionelle Hilfe zur SQL Server-Performance holen, stellen Sie sicher, dass Sie alles versucht haben um das Problem zu lösen. Viele der SQL Server – Krankheiten können schon mit einigen einfachen Mitteln gelöst werden.
In diesem Beitrag schauen wir uns fehlende Indizes mal genauer an:
In unserer Erste Hilfe-Rubrik finden Sie unter anderen ein Skript „04_MostImportantMissIndexes.sql“ welches Ihnen fehlende Indizes auflistet. Ein Ergebnis könnte so aussehen:
In der Abbildung sehen wir die TOP 10 fehlenden Indizes für meinen SQL Server.
Kurze Erläuterung der Spalten:
- Totale Kosten: Berechnet sich aus „avg_total_user_cost * avg_user_impact * (user_seeks + user_scans)„
- avg_user_impact: Durchschnittlicher prozentualer erwarteter Wert um den sich die Abfragegeschwindigkeit der betroffenen Abfragen verbessern würde
- Tabelle: Betroffene Tabelle
- Equality Colums: potenzielle Indexspalte, die in Abfragen mit Gleichheit (=) in der „Where“ – Anweisung verwendet wurde
- Inequality Columns: potenzielle Indexspalte, die in Abfragen mit Ungleichheit(<, >) in der „Where“ – Anweisung verwendet wurde
- Include Columns: Eingeschlossene Abfragespalten z.B. aus der SELECT Anweisung
Anhand dieser Informationen können wir nun unsere fehlenden Indizes aufbauen. Nehmen wir als Beispiel den ersten Eintrag aus der Tabelle. Hier würde sich folgenes CREATE-Statement ergeben:
CREATE NONCLUSTERED INDEX SXP_NCI_Database_Files_Info__Timestamp_name_type_desc ON mon.Database_Files_Info ([Timestamp], [name], [type_desc], [ID]) INCLUDE ([Total Size in MB]);
Folgende Empfehlungen sollten dabei beachtet werden:
- Listen Sie die Spalten für Gleichheit zuerst auf (äußerst links in der Spaltenliste).
- Listen Sie die Spalten für Ungleichheit nach den Spalten für Gleichheit auf (rechts von den aufgelisteten Spalten für Gleichheit).
- Listen Sie die eingeschlossenen Spalten in der INCLUDE-Klausel der CREATE INDEX-Anweisung auf.
- Ordnen Sie die Spalten für Gleichheit anhand ihrer Selektivität an, um eine sinnvolle Reihenfolge zu bestimmen. Listen Sie also die selektivsten Spalten zuerst auf.
- Indizes grundsätzlich erst ab einer Datensatzmenge von ca. 10.000 Datensätzen in einer Tabelle anlegen
- Nicht mehr als 5 Indizes pro Tabelle – je nach Tabelle und Verwendung
Quelle: https://technet.microsoft.com/de-de/library/ms345405(v=sql.105).aspx
Viel Spaß bei der Optimierung!
Wir halten Sie über zukünftige Neuerungen und Änderungen zu den Skripten in Form unseres Newsletters auf dem Laufenden. Einfach eintragen und up to date sein:Damit erhalten Sie erste Informationen vom SQL Server, in welchen Bereichen/ Tabellen es Probleme gibt.
Sollte ihr SQL Server immer noch nicht so laufen, wie Sie es gerne hätten, dann fragen Sie uns!
Brauchen Sie noch einen Xpertenrat?
Weitere Tutorials?
Natürlich haben wir noch mehr wertvolle Tipps rund um den SQL Server für Sie!