我有一个场景,其中有大量关于项目的状态数据.该项目的状态从分钟更新到分钟,并且在不久的将来将有大约50,000个项目.因此,在一个月内,将有大约2,232,000,000行数据.在获得旧数据之前,我必须在主表中保留至少3个月.
我必须计划根据特定项目(其ID)和数据范围(通常最多一个月的范围)实现快速查询 - 例如,从Table中选择A,B,C,其中ItemID = 3000,日期介于'2010-之间10-01'和'2010-10-31 23:59:59.999'
所以我的问题是如何设计一个分区结构来实现这一目标?
目前,我基于"项目的唯一标识符"(一个int)mod"分区数"进行分区,以便所有分区均匀分布.但它的缺点是在表上保留一个额外的列作为分区函数的分区列,因此,将行映射到其分区.所有这些都增加了一些额外的存储空间.此外,每个分区都映射到不同的文件组.
Rem*_*anu 15
从未对查询性能进行分区.通过分区,性能总会更糟,你可以期待的最好的是没有大的回归,但永远不会改进.
对于查询性能,分区可以做什么,索引可以做得更好,这应该是你的答案:索引适当.
分区对IO路径控制情况(在归档/当前卷上分发)或ETL负载中的快速接入切换方案很有用.所以我会理解你是否有一个滑动窗口和按日期分区,这样你就可以快速切换出不再需要保留的数据.
分区的另一个小例子是最后一页插入锁存器争用,如解决高度并发INSERT工作负载上的PAGELATCH争用中所述.
您的分区方案和用例似乎不适合它将受益的任何场景(可能是最后一个场景,但从描述中不清楚),因此很可能会伤害性能.
| 归档时间: |
|
| 查看次数: |
5951 次 |
| 最近记录: |