Упростите любое использование функций в предложении WHERE! Пример:
DELETE FROM Claims
WHERE dbo.YearMonthGet(DataFileYearMonth) = dbo.YearMonthGet(@DataFileYearMonth)
Эта форма предложения WHERE
требовала 8 минут для удаления 125 837 записей.
Функция YearMonthGet
состоит из даты и года и месяца из введенной даты и устанавливает day = 1
. Это должно было гарантировать, что мы удалили записи на основе года и месяца, но не дня месяца.
Я переписал предложение WHERE:
WHERE YEAR(DataFileYearMonth) = YEAR(@DataFileYearMonth)
AND MONTH(DataFileYearMonth) = MONTH(@DataFileYearMonth)
Результат: для удаления этих 125 837 записей потребовалось около 38-44 секунд!