【发布时间】:2015-02-14 05:29:39
【问题描述】:
您好想问一下如何分区下表(见下文)。我遇到的问题不在于检索由聚集索引解决的历史记录。但正如您所见,索引是基于 HistoryParameterID 然后是 TimeStamp,这是必需的,因为行的检索基于上述列。
这里的问题是,每当它达到约 10 亿条记录时,插入速度就会减慢,因为场景是要插入 15k 行\秒(注意这可以是 30k - 100k),并且每行对应于一个历史参数 ID。
基本上,HistoryParameterID 不是唯一的,它与下表的其他列有一个 -> 多的关系。
我的直觉是,由于索引,它会减慢插入速度,因为插入并不总是在底部,因为它是由 HistoryParameterID 排列的。
我使用时间戳作为索引进行了一些测试,但由于查询性能不可接受,因此无济于事。
有没有办法通过历史 ParameterID 进行分区?我正在尝试,所以我为分区视图创建了 15k 个表。但是当我创建视图时它没有完成执行。有小费吗?或者有什么方法可以分区?请注意,我使用的是标准版,不能使用企业版。
CREATE TABLE [dbo].[HistorySampleValues]
(
[HistoryParameterID] [int] NOT NULL,
[SourceTimeStamp] [datetime2](7) NOT NULL,
[ArchiveTimestamp] [datetime2](7) NOT NULL CONSTRAINT [DF__HistorySa__Archi__2A164134] DEFAULT (getutcdate()),
[ValueStatus] [int] NOT NULL,
[ArchiveStatus] [int] NOT NULL,
[IntegerValue] [bigint] SPARSE NULL,
[DoubleValue] [float] SPARSE NULL,
[StringValue] [varchar](100) SPARSE NULL,
[EnumNamedSetName] [varchar](100) SPARSE NULL,
[EnumNumericValue] [int] SPARSE NULL,
[EnumTextualValue] [varchar](256) SPARSE NULL
) ON [PRIMARY]
CREATE CLUSTERED INDEX [Source_HistParameterID_Index] ON [dbo].[HistorySampleValues]
(
[HistoryParameterID] ASC,
[SourceTimeStamp] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
【问题讨论】:
-
那不是几百万行吗?
-
十亿行,分配到 15k 个参数 ID