【发布时间】:2010-11-25 11:52:45
【问题描述】:
我可能会在一个巨大的表(数十亿行)上实现分区。
每个表格行都有关于特定设备的某种状态,该状态每分钟插入一次。因此,每台设备每天将有 1440 (24 x 60) 行。每个设备都有一个唯一的 ID (DeviceID)。
我考虑过使用 DeviceID MOD {TheNumberOfPartitionsThatIWant} 进行分区,我认为 TheNumberOfPartitionsThatIWant 为 250 是一个很好的折衷方案。使用这种策略,我可以将设备平均分布在整个分区中,而且,在查询特定设备时,查询引擎只需要触及一个分区,而不是所有 250 个分区。
问题是我需要在我的表中添加一个额外的列,只是为了指示该行所属的分区,以便我可以使用该列在 Partition Schema 上定义表。将 (DeviceID MOD 250) 提供给分区模式会好得多,而不是让这个列具有如此简单的表达式。有解决办法吗?
【问题讨论】:
-
我在您之前的@987654321@ 中看到一条评论说您有 2 个驱动器。使用 2 个分区.. 不是吗?如果你想处理这些类型的卷,你就不会在所有硬件上节衣缩食。
-
那只是一种体验。在最终解决方案中,我们可能会使用 DAS 或 SAN 配置。
-
您的分区策略的目的是什么?是在查询中实现分区消除、支持快速数据加载还是允许选择性归档旧数据?您可以根据 DeviceID 对计算列进行分区以创建 250 个范围,但考虑到所有分区可能每天都会更新,这不是一个明智的分区策略。另外,每天表的预期大小是多少(以 MB/GB 为单位)?
-
目的是在查询中消除分区。但是在我的测试中,分区表上的查询比非分区表上的查询要慢。设置了索引,它只访问一个分区(我在实际执行计划中检查过),但速度较慢。为什么?
标签: sql-server sql-server-2008