在分区表上均匀分布数据的最佳方法

Mar*_*uth 5 sql-server-2008 sql-server

我正在使用一个大约有 500MM 记录的数据库。我们目前使用静态分区方法,通过 int 标识符对数据进行分区,例如 < 150MM 在分区 1 上进行,> 150 && < 350 在分区 1 上进行,等等。

有哪些动态分区方案可以更好地在可用分区上均匀分布数据?有没有一种方法可以以最小的维护开销为动态方案添加额外的分区?

小智 2

散列是适用于您的用例的常见分区机制。它在 SQL 2008 中不可用:http://www.sqlservercentral.com/articles/partition/64740/

哈希分区的问题是,如果添加分区,则需要重新分配数据。从逻辑上讲,任何动态确定数据进入哪个分区的分区方案都需要在添加分区后重新分配数据(除了可能在插入时间上使用哈希 + 跟踪每个分区的添加时间)。这假设分区(通过预定义的方案分配数据以减少后续查找时间)与分片(将数据随机分配到多个框减少整个数据集的处理时间)。

您可以通过在插入/更新时自己生成哈希并在哈希值上使用基于范围的分区来模拟哈希分区。例如,假设您需要 10 个分区。模数将键值的哈希值除以 10,并对余数进行范围分区(每个范围取 10 个可能值之一)。