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 */
- 我要如何成功更改 运行 这个分区,同时仍然实现我的目标,即在
system_id
上拆分 table?
- 使用 table 上的主键可以实现这种分区吗?
PARTITIONing
要求您将“分区键”(system_id
) 添加到每个唯一索引,包括 PRIMARY KEY
.
我预测,您会发现 PARTITION BY HASH
对性能毫无用处。它甚至可能会减慢查询速度。
请显示您希望加快速度的查询;我会更详细地建议。
我有一个 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 */
- 我要如何成功更改 运行 这个分区,同时仍然实现我的目标,即在
system_id
上拆分 table? - 使用 table 上的主键可以实现这种分区吗?
PARTITIONing
要求您将“分区键”(system_id
) 添加到每个唯一索引,包括 PRIMARY KEY
.
我预测,您会发现 PARTITION BY HASH
对性能毫无用处。它甚至可能会减慢查询速度。
请显示您希望加快速度的查询;我会更详细地建议。