让我们有一个简单的产品表。每个产品都有其独特的ID和类别。用户经常按类别搜索,因此我想按类别对产品进行分区。一个分区中的每个类别,例如
我该怎么办?因为我的ID列当然有一个主键,需要我的ID唯一。在每个类别中都不是唯一的。
但是,partitiong有这样的限制:“表中的每个唯一键必须使用表的分区表达式中的每一列”。
那么,这不会使分区有点无用吗?或者我错过了什么?我该怎么办?
http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations-partitioning-keys-unique-keys.html
答案 0 :(得分:10)
诀窍是将字段category
添加到当前主键。 (您的主键仍将是主键)
然后,您可以按类别对表进行分区。
以下是您可能使用的代码:
ALTER TABLE `products` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` , `category` );
ALTER TABLE `products` PARTITION BY KEY(category) PARTITIONS 6;
如果您希望将auto_increment
选项真正唯一,则将{{1}}选项添加到id中,并且在表中插入数据时不指定id值。 id将在插入时由数据库服务器确定。
如有必要,请更改字段名称和密钥名称。