Удаление строк из большой кластеризованной таблицы обычно происходит медленно.
Знаменитый «МЕЖДУ», обсуждаемый в комментариях, является разделом из кластерного индекса, он принимает минимальное и максимальное значения из вашего объединения. Поэтому рекомендуется удалять партиями.
Я думаю, что может быть несколько общих рекомендаций, но это всегда
зависит от разных вещей, таких как объем данных, оборудование,
память, размер файла журнала и т. д. - Удалить строки в пакетах. Оптимальная партия
размер будет зависеть от окружающей среды, но обычно его около 10K
100K. - удалить в порядке кластерного индекса - при возможности включить
модель восстановления в BULK / SIMPLE для минимального ведения журнала. - Если возможно
удалить ограничения, такие как ограничение внешнего ключа из дочерней таблицы. -
Если возможно, отключите некластеризованные индексы - в зависимости от количества
данных, которые вы собираетесь удалить, возможно, было бы лучше экспортировать
данные в новую таблицу, а затем отбросить старую таблицу или сохранить его с
другое имя для дальнейшего использования. Как видите, в основном это будет
зависит от ситуации и окружающей среды.
Это лучший ответ: «Возможно, вам нужно настроить систему, а не запрос»
Но из заявления об удалении я бы предпочел увидеть большую часть стоимости
исходя из самого удаления. Поймите, кластерный индекс - это где
данные хранятся в таблице с кластерным индексом. Когда ты
удалить, вы удаляете из кластера. Это не значит, что вы
возможно, не сможет настроить это дальше, но вы видите очень нормально,
даже желаемое поведение. Не видя точно, что вы делаете,
трудно вносить предложения, но может случиться так, что вы делаете это
отлично. В этом случае, возможно, вам нужно настроить систему, а не
запрос. Получите более быстрые диски. Убедитесь, что вы не находитесь под давлением памяти.
Проверьте статистику ожидания, чтобы увидеть, где выполняется большая часть работы.
на сервере и внесите коррективы оттуда.
Если вы не можете сделать ничего из этого, вероятно, будет быстрее использовать цикл для удаления строки за строкой ....
источник: https://ask.sqlservercentral.com/questions/90223/how-to-reduce-the-cost-of-clustered-index-delete.html