繁体   English   中英

如何在sql server 2008 r2上实现mod分区?

[英]How to implement mod partitioning on sql server 2008 r2?

我可能会在一张巨大的桌子上实现分区(数十亿行)。

每个表行都有关于特定设备的某种状态,该状态每分钟插入一次。 因此,每台设备每天将有1440(24 x 60)行。 每个设备都有一个唯一的ID(DeviceID)。

我考虑过使用DeviceID MOD {TheNumberOfPartitionsThatIWant}进行分区,我认为TheNumberOfPartitionsThatIWant为250是一个很好的折衷方案。 使用这种策略,我可以将设备平均分布在整个分区中,而且,当查询特定设备时,查询引擎只需要触摸一个分区,而不是全部250个分区。

问题是我需要在表中添加一个额外的列,以表明该行所属的分区,以便可以使用此列在“分区模式”上定义表。 将(DeviceID MOD 250)提供给分区模式会好得多,而不是让这个列具有如此简单的表达式。 有解决方法吗?

您可以基于函数对模式绑定的计算列进行分区 - 但是虽然这确实有效,但优点将受到限制,我希望看到它的缩放测试。 然后,它还要求对表的每次访问都必须在where条件内使用相同的功能。

关键点由dportas提出-分区旨在使数据老化变得微不足道的操作,在某些时候,由于太旧/没有价值,需要清除系统中的数据,这时您将减少到长时间运行删除以删除此数据。

就跨多个磁盘分布数据而言,分区不会为现有的文件组/文件工具提供额外的任何额外功能。

合适的索引可能会比分区更好的结果。 正如@Andrew所说,分区主要是为了快速加载和卸载数据(即,切入和切出分区)。

我创建了一个计算列,解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM