Die obersten Ebenen des Plans befassen sich mit dem Entfernen von Zeilen aus der Basistabelle (dem Clustered-Index) und dem Verwalten von vier Nonclustered-Indizes. Zwei dieser Indizes werden zeilenweise verwaltet, während die Clustered-Index-Löschvorgänge verarbeitet werden. Dies sind die "+2 nicht gruppierten Indizes", die unten grün hervorgehoben sind.
Für die beiden anderen nicht gruppierten Indizes hat der Optimierer entschieden, dass es am besten ist, die Schlüssel dieser Indizes in einer temporären Arbeitstabelle (der Eager-Spool) zu speichern und dann die Spool zweimal abzuspielen, wobei nach den Indexschlüsseln sortiert wird, um ein sequentielles Zugriffsmuster zu fördern.
Die letzte Abfolge von Vorgängen befasst sich mit der Verwaltung der Primär- und Sekundärindizes xml
, die nicht in Ihrem DDL-Skript enthalten waren:
Hier gibt es nicht viel zu tun. Nicht gruppierte Indizes und xml
Indizes müssen mit den Daten in der Basistabelle synchronisiert bleiben. Die Kosten für die Verwaltung solcher Indizes sind Teil des Kompromisses, den Sie beim Erstellen zusätzlicher Indizes für eine Tabelle eingehen.
xml
Allerdings sind die Indizes besonders problematisch. Für den Optimierer ist es sehr schwierig, genau zu beurteilen, wie viele Zeilen in dieser Situation qualifiziert sind. Tatsächlich wird der xml
Index stark überschätzt , was dazu führt, dass für diese Abfrage fast 12 GB Speicher gewährt werden (obwohl zur Laufzeit nur 28 MB verwendet werden):
Sie können die Löschung in kleineren Stapeln durchführen, um die Auswirkungen der übermäßigen Speicherzuweisung zu verringern.
Sie können die Leistung eines Plans auch ohne die Sortierung testenOPTION (QUERYTRACEON 8795)
. Dies ist ein undokumentiertes Trace-Flag. Sie sollten es daher nur auf einem Entwicklungs- oder Testsystem ausprobieren, niemals in der Produktion. Wenn der resultierende Plan viel schneller ist, können Sie die Plan-XML erfassen und daraus einen Planleitfaden für die Produktionsabfrage erstellen .