1、Mysql分区优势
1、存储更多的数据
2、优化查询
3、并行处理
4、快速删除数据
5、更大的数据吞吐量
2、分区的类型
- range分区:根据一个连续的区间范围,将数据分散存储与不同的分区,支持对字段名或表达式进行分区
- list分区 :根据给定的值列表,将数据分散存储到不同的分区,支持对字段名或者表达式进行分区
- hash分区:根据给定的分区个数,结合一定的hash算法,将数据分散存储到不同的分区,可以使用用户自定义的函数
- key分区:与hash分区类似,但是只能使用mysql自带的hash函数
- columns分区:为解决MySQL5.5版本之前RANGE分区和LIST分区支持整数分区而在MySQL5.5版本新引入的分区类型 子分区:对数据表中的每个分区再次进行分区
、Mysql分区注意事项
1、分区键必须作为主键的一部分,因此分区键建议与原来表id作为联合主键!!!!!!!!!。
2、、查询条件里需包含分区键(非必选)
3、分区不要提前建太多,总数不能超过1024
4、分区的字段,必须是表上所有的唯一索引(或者主键索引)包含的字段的子集
5、range分区:分区字段必须是整型或者转换为整型,或者时间类型
6、当月分区不可删除
7、分区只能在当前基础上增加,不能反向增加分区(删除的分区,直接增加那个分区是不行的)
分区使用
1、创建分区
-- 创建分区表
CREATE TABLE `application_invoke_log` (
`ID` bigint(20) not null COMMENT 'ID',
`SOURCE_IP` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '源请求IP地址',
`APPKEY` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发起请求的应用',
`METHOD` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '请求方法',
`PATH` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '请求路径',
`ARG` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '请求参数',
`RESPONSE_TIME` bigint(20) DEFAULT NULL COMMENT '响应时间',
`INVOKE_RESULT` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '调用结果',
`INVOKE_TIME` datetime not null COMMENT '调用时间',
`IS_BLOCK` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`IS_EXP` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`EXP_MSG` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`ID`, `INVOKE_TIME`) USING BTREE
INDEX `APPKEY`(`APPKEY`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 comment = '应用调用日志'
PARTITION by range COLUMNS(INVOKE_TIME)(
partition p202208 values less than('20220901')
)
2、查看分区信息
select * from information_schema.PARTITIONS where table_name = 'application_invoke_log'
3、对存在的分区表修改
alter table application_invoke_log
PARTITION by range columns (INVOKE_TIME)(
PARTITION p202204 VALUES less than ('20220501'),
PARTITION p202205 VALUES less than ('20220601'),
PARTITION p202206 VALUES less than ('20220701')
)
4、查看分区数据
EXPLAIN select * from application_invoke_log where INVOKE_TIME = '2022-04-15 16:53:03'
5、对存在的表新增分区,注意分区值只能递增
alter table application_invoke_log add partition
(partition p202208 values less than('20220901'))
6、删除分区
alter table application_invoke_log drop partition p202101;
7、清空分区数据
alter table application_invoke_log truncate partition p202201;