Найвищі рівні плану стосуються видалення рядків із базової таблиці (кластерного індексу) та підтримання чотирьох некластеризованих індексів. Два з цих індексів підтримуються строково за рядком, при цьому обробляються кластерні видалення індексу. Це "+2 некластеризовані індекси", виділені зеленим кольором внизу.
Для інших двох некластеризованих індексів оптимізатор вирішив, що найкраще зберегти ключі цих індексів до робочого столу tempdb (Eager Spool), а потім відтворити котушку двічі, сортуючи за індексними клавішами для просування послідовного шаблону доступу.

Заключна послідовність операцій стосується збереження первинних та вторинних xmlіндексів, які не були включені у ваш сценарій DDL:

З цим робити не багато. Некластеризовані індекси та xmlіндекси повинні зберігатися синхронізованими з даними в базовій таблиці. Витрати на підтримку таких індексів є частиною компромісу, який ви здійснюєте, створюючи додаткові індекси на таблиці.
Однак, xmlіндекси особливо проблемні. Оптимізатору дуже важко точно оцінити, скільки рядків буде кваліфіковано в цій ситуації. Насправді це дико завищує xmlпоказник, в результаті чого для цього запиту надається майже 12 ГБ пам'яті (хоча під час виконання використовується лише 28 МБ):

Ви можете розглянути можливість видалення в менших партіях, сподіваючись зменшити вплив надмірного надання пам'яті.
Ви також можете перевірити виконання плану без використання сортування OPTION (QUERYTRACEON 8795). Це прапор без документації, тому слід спробувати його лише на розробці або тест-системі, ніколи у виробництві. Якщо отриманий план набагато швидше, ви можете захопити XML плану та використовувати його для створення посібника по плану для виробничого запиту.