Sql server sql server中时间序列的最佳性能设计

Sql server sql server中时间序列的最佳性能设计,sql-server,time-series,Sql Server,Time Series,(TL;DR) 设计要解决的问题: 快速检索不同频率的相关时间序列。 工具: sql server表和索引设计 较长的版本: 我希望使用不同分辨率的时间序列的输入数据,在一个或仅仅特定的时间或间隔计算不同的函数。我的直觉告诉我,我需要额外考虑表/索引的设计,因为对象需要快速连接行 到目前为止,我所看到的设计建议主要涉及检索单个时间序列,而这里的问题是,在同一时间点从不同的时间序列检索值 我的目标总体设计如下: CREATE TABLE [dbo].[time_series_definition]

(TL;DR)
设计要解决的问题:
快速检索不同频率的相关时间序列。
工具:
sql server表和索引设计

较长的版本:
我希望使用不同分辨率的时间序列的输入数据,在一个或仅仅特定的时间或间隔计算不同的函数。我的直觉告诉我,我需要额外考虑表/索引的设计,因为对象需要快速连接行

到目前为止,我所看到的设计建议主要涉及检索单个时间序列,而这里的问题是,在同一时间点从不同的时间序列检索值

我的目标总体设计如下:

CREATE TABLE [dbo].[time_series_definition](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [data_type_description] [nvarchar](100) NULL,
    [duration_sec] [int] NOT NULL,
 CONSTRAINT [PK_time_series_definition] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
))

CREATE TABLE [dbo].[time_series](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [start_date] [date] NOT NULL,
    [end_date] [date] NOT NULL,
    [time_series_definition_ID] [int] NOT NULL,
    [source] [nchar](30) NULL,
    [description] [nvarchar](100) NULL,
    [update_time] [datetime2](0) NOT NULL,
 CONSTRAINT [PK_time_series] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
))

ALTER TABLE [dbo].[time_series]  WITH CHECK ADD  CONSTRAINT [FK_time_series_time_series_definition] FOREIGN KEY([time_series_definition_ID])
REFERENCES [dbo].[time_series_definition] ([ID])

CREATE TABLE [dbo].[data_values](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [date_time] [datetime2](0) NOT NULL,
    [time_series_ID] [int] NOT NULL,
    [value] [decimal](19, 8) NULL,
 CONSTRAINT [PK_data_values] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
))

ALTER TABLE [dbo].[data_values]  WITH CHECK ADD  CONSTRAINT [FK_data_values_time_series] FOREIGN KEY([time_series_ID])
REFERENCES [dbo].[time_series] ([ID])
值[start_date]、[end_date]是冗余的,但相信当在[data_values]表中查找之前知道序列的开始/结束时,可以提高查询速度

[duration_sec]用于节省[data_values]表中的空间,因为序列在特定序列中的空间是均匀的


因此,对于这种设计,在给定的时间或时间间隔内实现不同序列的快速查找的最佳索引/分区策略是什么

到处都是。这里没有正确或错误的答案。您模糊地要求其他人在几乎没有任何信息的情况下设计您的数据库。我猜你想得太多了。你应该设计你的数据库来存储这种情况下的数据。然后,您开始关注报告要求,并在出现性能问题时处理这些问题。如果您从一开始就拥有设计良好的数据库,那么输出的性能通常是非常直接的。我的问题是,寻求最佳索引策略取决于初始设计。我确实考虑过这个问题,因为索引设计是我设计的最佳方案,但是选择了一个非常开放的问题,希望一些在时间序列上表现更好的设计可能会面面俱到。将我的初始设计添加到问题中。索引大约是60%的技术知识和40%的工艺。实际上,没有一种基于表设计的最佳索引策略。表设计当然是其中的一部分,但查询也很关键。where子句中使用了哪些列?身份真的是最好的聚类索引吗?您预计这些表中有多少行?普通查询返回的行数。所有这些都是索引策略中的因素。我将构建您的系统,并在出现问题时处理索引。