Ist es in Ordnung, fehlende Indizes blind hinzuzufügen?

21

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?

OO
quelle
1
Können Sie mir sagen, woher ich diese fehlende Index-Funktion bekommen kann?
Ali Raza Iftikhar

Antworten:

27

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 , ColBdem 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 vor ColB INCLUDE (ColC). Auch hier ist es klug ColC, 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.

JNK
quelle
Ich verstehe, vielleicht ist das der Grund, warum es sich so anfühlt, als hätte ich Milliarden von Indizes. Ich denke, ich sollte versuchen, diese Erklärungspläne besser zu verstehen und die Indizes manuell herauszufinden.
OO
Wenn Sie googeln duplicate index scriptsoder ä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.
JNK
"Sie brauchen immer noch einen denkenden Menschen, der die gesamte Indexierungsstrategie analysiert und sicherstellt, dass Ihre Indexstruktur effizient und kohärent ist." +1! Als Berater hatte ich unterschiedlichste Kunden in unterschiedlichsten Situationen. Manchmal erhalte ich diese Clients, weil sie viel zu viele (und die falschen, redundanten usw.) Indizes haben - alle vom Datenbankoptimierungsratgeber vorgeschlagen.
Mike Walsh
@JNK - das mache ich.
OO
2
Toller Punkt - überlappende Indizes sind auf jeden Fall die größte Sache, auf die Sie hier achten sollten. Und natürlich, je mehr Indizes Sie haben, desto langsamer wird die Einfügung, plus der Treffer für die Wartbarkeit (Hinzufügen von Komplexität) usw.
Jeff Atwood
8

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.

FloorDivision
quelle
2

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

Oleg Dok
quelle