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

Jos*_*ábl 9 mysql partitioning unique-index

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

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

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

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

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

Joc*_*lyn 11

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

以下是您可能使用的代码:

ALTER TABLE `products` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` , `category` );
ALTER TABLE `products` PARTITION BY KEY(category) PARTITIONS 6;
Run Code Online (Sandbox Code Playgroud)

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

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

文档:
分区类型
KEY Partioning

  • @JosefSábi:您仍然可以在ID上添加唯一索引. (2认同)