SQL Server: детерминированные столбцы и результирующая производительность представления - PullRequest
0 голосов
/ 10 мая 2019

У меня есть таблица с постоянно обновляемыми данными погоды за 30 секунд. Данные с моего датчика погоды в конечном итоге попадают на SQL Server с отметкой времени в формате UTC.

Я хочу иметь возможность суммировать эти высокочастотные данные в таблице DailySummary, однако я хочу, чтобы дни представляли мой местный часовой пояс (центральное стандартное время), а не UTC. Я добавил вычисляемый столбец в свою таблицу высокой частоты для местного времени, чтобы помочь в этом:

((([TmStamp] AT TIME ZONE 'UTC') AT TIME ZONE 'Central Standard Time'))

В нынешнем виде я не могу сделать этот столбец PERSISTED из-за его недетерминированности. Я также согласен с переходом на летнее время, которое дает мне 23-часовой рабочий день весной и 25-часовой рабочий день осенью.

В моем кратком представлении:

SELECT 
    DATEADD(DAY, 0, DATEDIFF(day, 0, TmStamp_Local)) AS CalDate,
    MAX(AirTemp_Avg) AS HighTemp,
    MIN(AirTemp_Avg) AS LowTemp,
    AVG(AirTemp_Avg) AS AvgTemp
FROM
    dbo.DL_MAIN_Weather
GROUP BY 
    DATEADD(DAY, 0, DATEDIFF(day, 0, TmStamp_Local))

Это работает, но относительно медленно (я добавлю больше столбцов в это представление в конце концов). Поскольку исторические данные о погоде не изменятся (если только мне не нужно вручную корректировать значение), кажется немного неэффективным пересчитывать эту таблицу каждый раз, когда мне это нужно.

Любые идеи о том, как ускорить его и, возможно, проиндексировать?

Я использую Microsoft SQL Server 2017.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...