我们有一个要划分的发票模型。作为一个基本示例,它包括:
列:HeaderId INT IDENTITY(1,1)已编组的唯一主键
列:InvoiceDate DATETIME
列:MemberId INT聚集索引
列:SupplierId
列:LineId INT IDENTITY(1,1)已编组的唯一主键
列:HeaderId INT聚集索引(对InvoiceHeads的外键约束)
对InvoiceHeads表进行分区很简单,我们可以在InvoiceDate上完成,但是通常在表中通过HeaderID列将这些表联接在一起。
这是否意味着分区在两个方面都尽可能有效,我们应该对HeaderId上的InvoiceLines进行分区,使其范围与父级InvoiceHeads的分区方式最接近,即
1-100000(大约是2017年的发票日期) 1000001-200000(大致发票日期为2018年) 200000+(大约是当前年份)
如果这是正确的方法,那么我们将不得不每年维护分区以更改范围,以为刚刚过去的一年创建一个新分区。
如果我们同时启用自动创建增量统计信息和自动更新统计信息,那么我的印象也很深刻,触发自动更新的20%更改将特定于每个分区中的卷,因此将有更多机会保留我们的尽可能地更新当前年份的统计信息,而不必对以前的年份数据进行完全扫描。