9

让我们有一个简单的产品表。每个产品都有其唯一的 ID 和类别。用户经常按类别搜索,所以我想按类别划分产品。一个分区中的每个类别,例如

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

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

好吧,这不是让分区有点没用吗?还是我错过了什么?我应该怎么办?

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

4

1 回答 1

13

诀窍是将该字段添加category到您当前的主键中。(您的主键将仍然是主键)
然后您可以按类别对表进行分区。

这是您可以使用的代码:

ALTER TABLE `products` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` , `category` );
ALTER TABLE `products` PARTITION BY KEY(category) PARTITIONS 6;

如果您希望它真正唯一,请在 id 中添加auto_increment选项,并且在向表中插入数据时不要指定 id 值。id 将在插入时由数据库服务器确定。

如有必要,更改字段名称和键名称。

文档:
分区类型
KEY 分区

于 2012-08-01T16:28:15.920 回答