mysql新建分区设置阈值(less than)引发的问题

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

mysql新建分表后入库之前分表区间的数据但是再分表中查询不到对应数据。

文章目录

问题背景

初始化表的时候先建的日期分区分2022年的表新的一年需要重新建分表。在执行脚本后建了2023年的12个分区。新增了1月份的数据后入库成功主表添加日期筛选可以查询全部数据在1月分表中查询为空。

问题解析

新建分区sql

ALTER TABLE fact_task_analyst
 ADD PARTITION (PARTITION fact_task_analyst_202301 VALUES LESS THAN (20230101));

ALTER TABLE fact_task_analyst
 ADD PARTITION (PARTITION fact_task_analyst_202302 VALUES LESS THAN (20230201));

查看分区

SELECT * from information_schema.PARTITIONS
where table_schema = schema()
and table_name = 'fact_task_analyst'

在这里插入图片描述

查询数据

查询主表数据通过分区主键查询可以查到全部数据
在这里插入图片描述
查询_202301分表数据是空的。
在这里插入图片描述

查询数据所在分区

使用EXPLAIN可以看到20230107的数据存在了202302的分分表数量为124条。
在这里插入图片描述
然后去查了202302的分表依旧是空的。
在这里插入图片描述
所以猜想大概就是在建分区有问题。
重新查看了建分区sql。发下再给分区设置 less than的时候202301分区设置的是20230101。
在这里插入图片描述

修改方案

把一月的分区的less than 改成20230201改为一月的阈值。

	ALTER TABLE fact_task_analyst
	ADD PARTITION (PARTITION fact_task_analyst_202301 VALUES LESS THAN (20230201));

ALTER TABLE fact_task_analyst
	ADD PARTITION (PARTITION fact_task_analyst_202302 VALUES LESS THAN (20230301));

重新插入数据后通过分表可以查询出来。
在这里插入图片描述

总结

LESS THAN

VALUES LESS THAN 分区最大值( “<” )。设置分区的最大阈值而不是初始值。

相关sql

查询分区

-- 查看分区情况
SELECT * from information_schema.PARTITIONS
where table_schema = schema()
and table_name = '表'

删除分区

-- 删除分区表
alter table 主表 drop PARTITION 分区名;

先建分区

-- 新建分区
ALTER TABLE 主表
	ADD PARTITION (PARTITION 分区 VALUES LESS THAN (最大阈值));
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql