Как удалить много данных условием WHERE на поле с индексом на большой и нагруженной таблице?

Задача чисто теоретическая, поэтому тонкости можно не уточнять. А если от тонкостей что-то зависит, то можно об этом написать.

Есть таблица c множеством записей (допустим 1M-100M), где есть поле DateTime и индекс на этом поле. Нужно удалить тоже много записей (допустим 10k-500k), которые раньше определенного времени по полю DateTime. Но таблица очень активно используеться в проде. Как сделать удаление с минимальными последствиями для производительности на проде?

Какие у меня мысли возникают:

  • индекс лучше не использовать, так как при удалении большого количества записей вероятно будет полный проход по таблице, где индекс не будет использован, так как это будет быстрее. Хотя не знаю этот подход можно настроить или авто постоитель плана сам все придумает по желанию.
  • индекс лучше отключить на время удаления, для того что бы небыло лишних операций перестройки индекса, а после включить. Но не уверен будут ли тут проблемы с нагрузкой на проде?

Есть подходы лучше?

Еще думаю возможно есть тонкости в условии или решении:

  • важно что поле типа DateTime?
  • если таблица будет не большой, то это что-то меняет?
  • может нагрузка на проде быть разной по своей природе, так что на производительность вообще не повлияет удаление или всегда точно повлияет?

Ответы (0 шт):