SQL Server:确定性列和由此产生的视图性能

时间:2019-05-10 02:18:07

标签: sql sql-server tsql

我有一张桌子,它在不断更新30秒天气数据。来自我的天气传感器的数据最终以UTC时间戳最终存储在SQL Server中。

我希望能够在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。

0 个答案:

没有答案