MySql8.0根据多个列创建表分区
注意,这个创建方法适合已经知道字段内会有什么数据情况下使用,如果新增数据时,数据内容不是分区里面设置的就会保存失败。
创建语句如下:
CREATE TABLE `test` (
`device_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '设备ID',
`device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备名称',
`belong_city` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '所属地市',
`belong_third_party` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '所属第三方',
PRIMARY KEY (`device_id``belong_city`, `belong_third_party`) USING BTREE,
INDEX `summarized_device2_device_id_idx`(`device_id`) USING BTREE,
INDEX `idx_selecteDevice`(`device_id`, `belong_city`, `belong_third_party`) USING BTREE COMMENT '根据设备查询索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备汇总表' ROW_FORMAT = DYNAMIC
# COLUMNS (xx,xx) 表示需要使用的列字段
PARTITION BY LIST COLUMNS (`belong_third_party`,`belong_city`)
(
PARTITION `test_third_city` VALUES IN (('类型1', 'shenzhen')),
PARTITION `test_third_city2` VALUES IN (('类型2', 'dongguan')),
# 分区的规则,一个分区可以使用多个规则匹配数据
PARTITION `test_third_city3` VALUES IN (('类型3', 'ces'),('类型4', 'ces2')),
PARTITION `test_def` VALUES IN ((NULL, NULL))
)
;
## 查看创建表分区
SELECT PARTITION_NAME,TABLE_ROWS
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'test';