2010-11-25 37 views
0

我可能会在一张巨大的桌子上实现分区(数十亿行)。如何在sql server 2008 r2上实现mod分区?

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

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

问题是我需要向我的表添加一个额外的列,只是为了指示该行所属的分区,以便我可以使用此列在分区架构上定义表。将(DeviceID MOD 250)提供给分区模式将会好得多,而不是具有如此简单表达式的该列。有没有解决方法?

+0

我在你以前的[问题](http://stackoverflow.com/questions/4249073/partitioning-for-query-performance-in-sql-server-2008)上看到一条评论,你有** 2 **驱动器。使用2个分区..不是?如果你想处理这些卷,你根本不需要在硬件上进行任何操作。 – gbn 2010-11-25 12:01:46

回答

2

您可以基于函数对基于模式绑定的计算列进行分区 - 但是,尽管这样做有效,但好处将受到限制,我希望看到它的缩放测试。此外,它还要求对该表的每个访问都使用该标准内的相同功能。

关键在于dportas - 分区旨在使数据老化成为一项微不足道的操作,在某些时候系统中的数据需要清除,因为太旧/没有价值,此时您将被减少为长时间运行的删除操作以删除此数据。

就跨多个磁盘传播数据而言,分区不会为现有文件组/文件设施提供任何明显额外的任何内容。

0

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

0

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