Woher weiß ich, wann / ob ich zu viele Indizes habe?

26

Ab und zu wird Microsoft SQL Server Profiler ausgeführt, und es werden eine Reihe neuer zu erstellender Indizes und Statistiken vorgeschlagen ("... 97% geschätzte Verbesserung ...").

Nach meinem Verständnis kann jeder hinzugefügte Index eine SQL- SELECTAbfrage beschleunigen, aber auch eine UPDATEoder eine INSERTAbfrage verlangsamen, da die Indizes angepasst werden müssen.

Was ich mich frage, ist, wann ich "zu viele" Indizes / Statistiken habe?

Vielleicht gibt es darauf keine eindeutige Antwort, aber eine Faustregel.

Uwe Keim
quelle
1
Related: dba.stackexchange.com/questions/56/…
Nick Chammas
Danke, @Nick. Ich habe Google und dba.se.com sorgfältig durchsucht, bevor ich meine Frage gestellt habe. Meiner Meinung nach hat dies nichts zu tun. Ich möchte nicht wissen, ob ein Index erforderlich ist, sondern wie ermittelt werden soll, wenn zu viele Indizes UPDATEund INSERTAnweisungen zu langsam sind.
Uwe Keim
3
Hast du die Antworten dort gelesen? Die akzeptierte Antwort enthält beispielsweise Links zu einigen Analyseskripten, mit deren Hilfe Sie nicht verwendete Indizes identifizieren können, die entfernt werden sollten. Dies kann hilfreich sein, um Ihre Frage zu beantworten, wenn Sie "zu viele" Indizes haben.
Nick Chammas

Antworten:

24

Ihr Lastprofil ist der wichtigste Faktor bei der Beantwortung dieser Frage.

  • Wenn Ihre Last viel Lesezugriff erfordert, möchten Sie, dass Indizes Ihre häufigsten oder schwersten Abfragen erfüllen.

  • Wenn Ihre Last schreibintensiv ist, indizieren Sie sie sorgfältig. Ein Index, um beispielsweise die Anforderungen eines UPDATE-Suchvorgangs zu erfüllen, sowie ein oder zwei der teuersten SELECTs.

  • Wenn es sich bei Ihrer Last um eine OLAP-Last handelt, indizieren Sie sie sparsam, da Sie die Zieltabellen trotzdem durchsuchen werden.

Woher wissen Sie, dass Sie zu viele Indizes haben?

  • Wenn Sie sehen, dass einige von ihnen nicht von Abfragen verwendet werden.

  • Ein häufiges LÖSCHEN, AKTUALISIEREN oder EINFÜGEN zeigt einen Abfrageplan an, der mehrere kostspielige Indexänderungen umfasst (dh Einfügen , Aktualisieren oder Löschen eines nicht gruppierten Index ). Verwenden Sie Ihr Urteilsvermögen, um festzustellen, ob die Strafe für diese DML-Anweisungen den Gewinn wert ist, den Sie durch die zu aktualisierenden Indizes erzielen.

Nick Chammas
quelle
8

Wenn Sie Indizes haben, die gepflegt werden, aber nie verwendet werden (oder selten verwendet werden), dann haben Sie zu viele Indizes. Wenn alle Ihre Indizes verwendet werden, um die Benutzerleistung zu verbessern, müssen Sie nicht zu viele.

mrdenny
quelle
Darf ich vorschlagen, die beiden Vorkommen von " zu " zu " auch " zu ändern , da ich sie nicht bearbeiten kann, da meine Bearbeitung mindestens 6 Zeichen ändern müsste?
Uwe Keim