MySQL 对包含主键的 Table 进行分区

MySQL Partitioning a Table That Contains a Primary Key

我有一个 table 想要分区:

CREATE TABLE `tbl_orders` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'utf8mb4_general_ci',
    `system_id` INT(11) NOT NULL DEFAULT '0',
    `created_at` DATETIME NULL DEFAULT NULL,
    `updated_at` DATETIME NULL DEFAULT NULL,
    PRIMARY KEY (`id`) USING BTREE,
    INDEX `system_id` (`system_id`) USING BTREE
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=8
;

ALTER table tbl_orders
PARTITION BY HASH(system_id)
PARTITIONS 4;

我试图实现的示例: 我有一个 table,我想按 system_id 进行分区以加快查询速度。

当我 运行 分区时,出现以下错误:

/* SQL Error (1503): A PRIMARY KEY must include all columns in the table's partitioning function */

  1. 我要如何成功更改 运行 这个分区,同时仍然实现我的目标,即在 system_id 上拆分 table?
  2. 使用 table 上的主键可以实现这种分区吗?

PARTITIONing 要求您将“分区键”(system_id) 添加到每个唯一索引,包括 PRIMARY KEY.

我预测,您会发现 PARTITION BY HASH 对性能毫无用处。它甚至可能会减慢查询速度。

请显示您希望加快速度的查询;我会更详细地建议。