根据mysql的解释,“分区表的分区表达式中使用的所有列都必须是该表可能具有的每个唯一键的一部分”。为什么只有唯一/主键,为什么不包括其他键?
发布于 2014-01-07 00:25:14
我假设您所说的非唯一键是指索引。
假设您有一个作为平衡树的键,这里是一个B树,您按照一定的标准对其进行分区,以获得所需的分区数量或每个分区中所需的成员数量。如果这样做,因为树是具有唯一键的树,所以您正在将实际数据划分为大小几乎平衡的分区。
现在假设您有一个索引的值的B树(例如secondary index in InnoDB),树中的每个键都指向表的几个数据成员。在这种情况下,根据B树进行分区并不意味着将数据分区为平衡的区块,因此没有必要考虑它。
另一方面,在实践中,至少根据我自己的经验,主键和唯一键是您在设计表时通常必须回答的设计问题,而不是有时将索引添加到表中以提高查询的性能,而这些查询恰好是经常执行的。如果您添加了在所有键和索引中具有分区字段的约束,则必须从分区中删除该字段,或者将分区字段的所有字段作为默认字段添加到所有索引中。因此,这不是一个好的实践。
https://stackoverflow.com/questions/14933328
复制相似问题