Перепишите возможно. Одним из аппаратных решений было бы убедиться, что временная таблица вашей базы данных работает на «быстром» диске, возможно, на твердотельном диске (SSD), или может управляться всеми в памяти.
Полагаю, это «решение» было разработано кем-то, кто разбирается в электронных таблицах и зависит от него, кем-то, кто не очень разбирается в «нормализованных» базах данных - как создавать и заполнять таблицы для хранения данных для целей отчетности что-то, что, возможно, программное обеспечение BI Business Intelligence, может использоваться с изощренностью и все же быть адаптируемым.
Вы не сказали «где» выполняется процесс обновления. Процесс обновления запускается как сценарий SQL с отдельного компьютера (рабочего стола) на сервере, на котором находятся данные? При таком подходе могут возникнуть значительные узкие места и накладные расходы. Если это так, рассмотрите возможность запуска всего процесса обновления непосредственно на сервере как локальное задание, как скомпилированную хранимую процедуру, минуя сеть и (несколько) накладные расходы на управление курсором. У него может быть запланированное время выполнения и контролируемый приоритет, что завершается в непиковые часы использования бизнес-данных.
Оцените, как часто операторы 'commit' действительно необходимы для последовательности операторов обновления ... сохранение нескольких строк коммитов может заметно улучшить общее время обновления. В программном драйвере клиента базы данных может быть несколько параметров, которые могут иметь существенное значение.
Могут ли запросы, используемые для условий обновления, быть разложены в виде статических «представлений», которые, в свою очередь, могут использоваться несколькими операторами обновления? Представления могут хранить в памяти данные / строки запросов, к которым часто обращаются. Возможна настройка производительности при определении того, сколько данных обновления может быть отложено до оптимального принятия.
Возможно, стоит оценить, можно ли использовать триггеры для замены последовательности обновления пакетного задания. Вы не говорите, из каких таблиц получены данные ... которые могут помочь в принятии решений. Я не знаю, есть ли у вас возможность добавить триггеры в таблицы базы данных, из которых собираются данные. Если это так, добавление нескольких триггеров к нескольким таблицам не сильно снизит общую производительность системы, но может сэкономить большую часть времени в процессе обновления. Вы можете попробовать заменить операторы обновления по одному триггерами и посмотреть, будут ли результаты такими же, как раньше. Создайте аналогичную временную таблицу, основанную на том же процессе обновления, затем тщательно проверьте, могут ли триггеры подачи обновлений в временную таблицу заменить отдельные операторы обновления. Возможно, у вас есть своего рода приложение «Хранилище данных». Может быть полезно рассмотреть, как настроить «звездную» схему таблиц для хранения обобщенных бизнес-данных для отчетности.
Создание всеобъемлющего и кэшированного «представления», которое обновляется с помощью запросов один раз в день, что отражает обновления, возможно, является еще одним подходом к исследованию.