【发布时间】:2022-01-22 08:26:28
【问题描述】:
我有一个要分区的表:
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;
我想要达到的目标示例:
我有一张表,我想按system_id 对其进行分区以加快查询速度。
运行分区时出现以下错误:
/* SQL 错误 (1503): PRIMARY KEY 必须包含表的分区函数中的所有列 */
- 要成功运行此分区,同时仍能实现在
system_id上拆分表的目标,我需要进行哪些更改? - 使用表上的主键可以实现这种分区方式吗?
【问题讨论】:
-
请向我们展示您希望加快速度的查询。你已经有一个
INDEX;这比PARTITION BY HASH好多了。 -
我的问题的重点是找出解决问题的方法。请问有人可以帮忙解决这个问题吗?
标签: mysql partitioning