如何按不在唯一索引中的列对MySQL表进行分区

时间:2012-08-01 15:52:44

标签: mysql partitioning unique-index

让我们有一个简单的产品表。每个产品都有其独特的ID和类别。用户经常按类别搜索,因此我想按类别对产品进行分区。一个分区中的每个类别,例如

我该怎么办?因为我的ID列当然有一个主键,需要我的ID唯一。在每个类别中都不是唯一的。

但是,partitiong有这样的限制:“表中的每个唯一键必须使用表的分区表达式中的每一列”。

那么,这不会使分区有点无用吗?或者我错过了什么?我该怎么办?

http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations-partitioning-keys-unique-keys.html

1 个答案:

答案 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将在插入时由数据库服务器确定。

如有必要,请更改字段名称和密钥名称。

文档:
Partitioning types
KEY Partioning