Mysql 分区表基本操作和注意事项

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白鸽呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值