У меня есть приложение, которое запускает симуляцию на временных данных.Расчеты не слишком сложны, однако для расчета требуются предварительно предсказанные временные данные в той же имитации.
Давайте предположим, что имитация использует данные за 1 неделю с точками данных с 15-минутным интервалом.Упрощенный расчет для прогнозируемого значения выглядит следующим образом:
PredictedValue = A + B + C + D
Чтобы получить значения B, C и D, для моделирования требуются предварительно рассчитанные данные при t0, t-1, t-95, t-96, т-672 и т-673.Это временные данные для текущего и предыдущего интервала, текущего и предыдущего интервала предыдущего дня и текущего и предыдущего интервала предыдущей недели.
У меня есть рабочая реализация, которая имитирует данные за любой период времени, однако производительность крайне низкаяс большими наборами данных.
Реализация использует курсор TSQL для циклического перебора временных данных при моделировании и скалярную функцию для извлечения ранее рассчитанных данных.
В основном, чем больше набор данных, тем медленнее выполняется симуляция.Например, моделирование с использованием данных за 1 день занимает <1 минуту;симуляция с месяцем данных занимает 2-3 дня. </p>
Мне действительно интересно, как можно повысить производительность кода TSQL без использования курсора или скалярных функций.