为什么只有唯一/主键必须在分区表的分区表达式中使用所有列

时间:2013-02-18 09:45:11

标签: mysql

根据mysql说明“分区表的分区表达式中使用的所有列必须是表可能具有的每个唯一键的一部分”。为什么只有唯一/主键,为什么不是其他键?

1 个答案:

答案 0 :(得分:1)

我假设一个非唯一键是指索引。

想象一下,你有一个密钥作为平衡树,这里是一个B树,你按一定的标准对其进行分区,以便在每个分区中拥有所需数量的分区或所需数量的成员。如果这样做,因为树是唯一键的树,您将实际数据划分为几乎平衡大小的分区。

现在假设您有一个索引值的B树(例如secondary index in InnoDB),并且树的每个键都指向表的多个数据成员。在这种情况下,根据B树进行分区并不意味着将数据划分为平衡块,因此没有必要考虑它。

另一方面,在实践中,至少根据我自己的经验,主键和唯一键是设计表时通常必须回答的设计问题,与有时添加到表中的索引相反。用于提高经常执行的查询性能的表。如果在所有键和索引中添加包含分区字段的约束,则对于在分区字段中没有字段的每个索引,您必须从分区中删除该字段,或者将分区字段的所有字段添加为默认为所有指数。因此,这不是一个好习惯。