Сначала убедитесь, что у вас есть индекс на дату.
Если есть индекс, проверьте план выполнения и убедитесь, что он его использует.Обратите внимание, что не всегда следует, что использование индекса является наиболее эффективным методом обработки удаления, потому что, если вы удаляете большую часть записей (практическое правило превышает 10%), дополнительные издержки на просмотр индексаup может быть больше, чем полное сканирование.
С большой таблицей также стоит убедиться, что статистика актуальна (запустите sp_updatestats ), потому что, если база данных неверноиз числа строк в таблице он сделает неправильный выбор в своем плане выполнения.Например, если статистика неверна, база данных может принять решение игнорировать ваш индекс, даже если он существует, потому что считает, что в таблице гораздо меньше записей, чем есть.Нечетное распределение дат может иметь аналогичные последствия.
Вероятно, я бы попытался сбросить индекс по дате, а затем воссоздать его снова.Индексы являются двоичными деревьями, и для эффективной работы их необходимо сбалансировать.Если ваши данные накапливались с течением времени, индекс может быть однобоким, и запросам может потребоваться много времени, чтобы найти подходящие данные.И эта проблема, и проблема статистики должны автоматически решаться вашей задачей обслуживания базы данных, но это часто упускается из виду.
Наконец, вы не говорите, есть ли в таблице много других индексов.Если есть, то у вас могут возникнуть проблемы с базой данных, вынужденной реорганизовать индексы по мере удаления, а также обновления индексов.Это немного радикально, но один из вариантов - сбросить все остальные индексы в таблице перед выполнением удаления, а затем создать их снова.