Ich verwende häufig SSMS, um meine langsam gespeicherten Prozeduren auf fehlende Indizes zu testen. Immer wenn ich einen "Fehlenden Index (Impact xxx)" sehe, besteht meine knifflige Reaktion darin, einfach den neuen Index zu erstellen. Dies führt zu einer schnelleren Abfrage, soweit ich das beurteilen kann.
Gibt es einen Grund, warum ich das nicht weiter machen sollte?
Antworten:
Viele Gründe.
Eines der größten, an das ich denken kann, ist, dass die fehlenden Index-DMVs vorhandene Indizes nicht berücksichtigen.
Beispiel:
Du hast einen Tisch mit
ColA, ColB, ColC
.Derzeit haben Sie einen Index für
ColA
. Der fehlende Index DMV schlägt vor, dass Sie einen Index hinzufügen(ColA, ColB)
. Dies mag richtig sein, aber es ist klug ,ColB
dem vorhandenen Index einen zweiten Schlüssel hinzuzufügen . Ansonsten haben Sie doppelte Abdeckung und verschwendeten Speicherplatz und Overhead.Wenn Sie einen Index für haben
ColB INCLUDE (ColA)
, schlägt er möglicherweise einen Index für vorColB INCLUDE (ColC)
. Auch hier ist es klugColC
, die Include-Liste in den vorhandenen Index aufzunehmen.Die vorgeschlagenen Indizes haben eine extrem enge Sicht - sie betrachten nur eine einzelne Abfrage oder eine einzelne Operation innerhalb einer einzelnen Abfrage. Sie berücksichtigen nicht, was bereits vorhanden ist, oder Ihre anderen Abfragemuster.
Sie brauchen immer noch einen denkenden Menschen, der die gesamte Indexierungsstrategie analysiert und sicherstellt, dass Ihre Indexstruktur effizient und kohärent ist.
Wenn es keine Probleme gäbe, nur alle vorgeschlagenen Indizes hinzuzufügen, müssten sie nicht einmal vorgeschlagen werden - sie würden automatisch implementiert.
quelle
duplicate index scripts
oder ähnliches, gibt es eine Menge Ressourcen, um diese Dinge aufzuspüren. Ich verwalte die meisten meiner eigenen Indizes und weiß einiges darüber, aber ich finde immer noch von Zeit zu Zeit Dupes.Ich empfehle die vorsichtige Verwendung dieser Optimierungsmethode, da fehlende Indexvorschläge in Abfrageplänen immer weniger zuverlässig sind, da Abfragen und DB-Schemata zunehmend komplexer werden. Dies hat meiner Erfahrung nach verschiedene Gründe:
1) Die "prozentuale Verbesserung" kann für alle außer für die einfachsten Abfragen / offensichtlichsten Indizes weit entfernt sein, schließlich handelt es sich nur um eine Schätzung, die sich nicht aus den tatsächlich angefallenen Kosten oder der tatsächlichen Zeilenanzahl bei der Ausführung der Abfrage ergibt. Ich habe gesehen, dass die Abfragekosten gestiegen sind, nachdem ein vorgeschlagener Index implementiert wurde, oder er wird nicht einmal verwendet und der Plan bleibt derselbe.
2) Der Abfrageplan selbst ist entweder aufgrund des Aufbaus der Abfrage (Verknüpfungen und Where-Klausel nicht optimiert usw.) nicht optimal, oder die Zeilenanzahlschätzungen sind aufgrund fehlender / veralteter Statistiken nicht korrekt. Die Indizierung auf einen brutal schlechten Abfrageplan ist häufig bestenfalls eine Band-Aid-Lösung mit nur einer schrittweisen Verbesserung der Leistung.
3) Möglicherweise sehen Sie nicht das gesamte Bild. Dies gilt insbesondere dann, wenn nur der grafische Plan verwendet wird und nicht die XML-Datei angezeigt wird, um festzustellen, ob mehr als ein fehlender Index vorgeschlagen wurde. Das im grafischen Plan zuerst angezeigte ist nicht unbedingt das, das sich am meisten auf die Abfrage auswirkt.
4) Ich habe auch viele Beispiele für neue Indizes gefunden, die vorgeschlagen werden, wenn der vorhandene Index geändert wird. Sehen Sie sich die anderen Antworten hier zu diesem Punkt an, sie sind genau richtig und ich muss nicht weiter darauf eingehen.
Ich verwende die fehlenden Indexvorschläge nur als Ausgangspunkt, wenn ich mit einer unbekannten Abfrage / Umgebung arbeite, um herauszufinden, wo ich genauer hinschauen soll. Ich habe bessere Ergebnisse erzielt, wenn ich die Operatoren im Plan (hauptsächlich die Suchvorgänge / Suchvorgänge / Verknüpfungen) und das Tooltip- oder Eigenschaftenfenster überprüft habe, um festzustellen, welche Spalten betroffen sind, und um anhand dieser Informationen die Indexkandidaten zu ermitteln, die auf Verbesserung getestet werden sollen.
quelle
Es gibt eine Reihe von Gründen, vor allem - wenn Sie wissen, wie Indizes funktionieren und gespeichert werden -, erstellen Sie einen Index immer besser oder zumindest nicht schlechter als die Vorschläge von SSMS
quelle