I livelli principali del piano riguardano la rimozione delle righe dalla tabella di base (l'indice cluster) e il mantenimento di quattro indici non cluster. Due di questi indici vengono mantenuti riga per riga contemporaneamente all'elaborazione delle eliminazioni degli indici cluster. Questi sono i "+2 indici non cluster" evidenziati in verde di seguito.
Per gli altri due indici non cluster, l'ottimizzatore ha deciso che è meglio salvare le chiavi di questi indici su un tavolo di lavoro tempdb (l'Eager Spool), quindi riprodurre lo spool due volte, ordinandolo per i tasti indice per promuovere un modello di accesso sequenziale.

La sequenza finale delle operazioni riguarda il mantenimento degli xmlindici primario e secondario , che non sono stati inclusi nello script DDL:

Non c'è molto da fare al riguardo. Gli indici e gli xmlindici non cluster devono essere mantenuti sincronizzati con i dati nella tabella di base. Il costo di gestione di tali indici fa parte del compromesso che si effettua quando si creano indici aggiuntivi su una tabella.
Detto questo, gli xmlindici sono particolarmente problematici. È molto difficile per l'ottimizzatore valutare con precisione quante righe si qualificheranno in questa situazione. In realtà, sopravvaluta enormemente per l' xmlindice, determinando la concessione di quasi 12 GB di memoria per questa query (anche se al momento dell'esecuzione vengono utilizzati solo 28 MB):

È possibile prendere in considerazione l'esecuzione dell'eliminazione in batch più piccoli, sperando di ridurre l'impatto dell'eccessiva concessione di memoria.
È inoltre possibile testare le prestazioni di un piano senza l'utilizzo di sorta OPTION (QUERYTRACEON 8795). Questo è un flag di traccia non documentato, quindi dovresti provarlo solo su un sistema di sviluppo o test, mai in produzione. Se il piano risultante è molto più veloce, è possibile acquisire l'XML del piano e utilizzarlo per creare una guida di piano per la query di produzione.