Лучший дизайн производительности с временными рядами в sql-сервере - PullRequest
0 голосов
/ 04 ноября 2019

(TL; DR)
Проблема, которую необходимо решить с помощью проекта:
быстрый поиск связанных временных рядов с различной частотой.
Инструмент:
Таблица сервера sql и дизайн индекса.

Более длинная версия:
Я хочу рассчитать различные функции в один или несколько раз или через определенные интервалы времени с использованием входных данных из временных рядов с различным разрешением. И моя интуиция подсказывает мне, что мне нужно подумать о дизайне таблиц / индексов, учитывая, что объект должен иметь быстрое соединение строк.

Советы по проектированию, которые я видел до сих пор, в основном касаются извлечения одного временного ряда по сравнению с проблемой, данной здесь, извлечения значений из разных временных рядов в один и тот же момент времени. Схема таблицы для данных нескольких временных рядов

Общая цель моего плана следующая:

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], так как рядравномерно пространство в пределах определенной серии.

Таким образом, с учетом этой схемы, какова наилучшая стратегия индекса / разбиения, позволяющая осуществлять быстрый поиск различных рядов в заданный промежуток времени или времени.

...