Mysql表如何按照日期字段的年月分区,
目录
- 一、创键表时直接设置分区
- 二、已有表分区
- 1、分区的前置条件
- 2、分区操作
- 三、验证
- 四、注意
- 总结
一、创键表时直接设置分区
CREATE TABLE your_table_name (
id INT NOT NULL AUTO_INCREMENT,
sale_date DATE NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
PRIMARY KEY (id, sale_date)
) PARTITION BY RANGE COLUMNS(sale_date) (
PARTITION p2020_01 VALUES LESS THAN ('2020-02-01'),
PARTITION p2020_02 VALUES LESS THAN ('2020-03-01'),
PARTITION p2020_03 VALUES LESS THAN ('2020-04-01'),
PARTITION p2021_01 VALUES LESS THAN ('2021-02-01'),
PARTITION p_max VALUES LESS THAN (MAXVALUE)
);
二、已有表分区
1、分区的前置条件
确保主键或唯一键包含分区键,若已经创建表可以修改
ALTER TABLE your_table_name DROP PRIMARY KEY; ALTER TABLE your_table_name ADD PRIMARY KEY (id, xxdate);
2、分区操作
查询需要分区的日期字段所含有的年月
SELECT DISTINCT DATE_FORMAT(xxdate, '%Y-%m') AS YM FROM your_table_name ORDER BY YM;
根据上面sql语句查询的年月数据创建分区
# 我这只有202307、202308两个月数据
ALTER TABLE your_table_name
PARTITION BY RANGE COLUMNS(xxdate) (
PARTITION p2023_07 VALUES LESS THAN ('2023-08-01'),
PARTITION p2023_08 VALUES LESS THAN ('2023-09-01'),
PARTITION p_max VALUES LESS THAN (MAXVALUE)
);
三、验证
EXPLAIN SELECT * from your_table_name where xxdate BETWEEN '2023-07-01' and '2023-07-31';
partitions 命中一个目标分区则分区成功,如:partitions列的值为 p2023_07
四、注意
如果有新的月份分区需要增加,则需要手动去修改,否则归为p_max分区影响查询效率
ALTER TABLE your_table_name
PARTITION BY RANGE COLUMNS(xxdate) (
PARTITION p2023_07 VALUES LESS THAN ('2023-08-01'),
PARTITION p2023_08 VALUES LESS THAN ('2023-09-01'),
# 在这里添加
PARTITION p_max VALUES LESS THAN (MAXVALUE)
);
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持PHP之友。
您可能感兴趣的文章:- MySQL 如果单独获取已知日期的年月日
- mysql获取当前日期年月的两种实现方式
- MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解
- mysql数据库您要的常见日期查询方法总结
- MySQL to_date()日期转换的用法及注意事项
- MySQL中计算两个日期的间隔天数方式
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。