Mysql表如何按照日期字段的年月分区

 更新时间:2025年04月11日 14:34:02   作者:自不惘  
这篇文章主要介绍了Mysql表如何按照日期字段的年月分区的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、创键表时直接设置分区

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)
);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL复制表结构和内容到另一张表中的SQL语句

    MySQL复制表结构和内容到另一张表中的SQL语句

    这篇文章主要介绍了MySQL复制表结构和内容到另一张表中的SQL语句,需要的朋友可以参考下
    2014-07-07
  • MySQL双主高可用详解

    MySQL双主高可用详解

    文章介绍了在CentOS7.9上部署MySQL双主架构及Keepalived高可用方案,涵盖主机规划、系统优化、MySQL自动安装、主从同步配置和Keepalived部署步骤,强调版本兼容性与脚本执行要求
    2025-08-08
  • 使用mysql查询当天、近一周、近一个月及近一年的数据

    使用mysql查询当天、近一周、近一个月及近一年的数据

    不论你是一名数据库管理员或SQL开发者,还是一名简单的MySQL用户,掌握查询特定日期数据的方法都是必不可少的,下面这篇文章主要给大家介绍了关于如何使用mysql查询当天、近一周、近一个月及近一年的数据,需要的朋友可以参考下
    2023-06-06
  • MySQL8.0中binlog的深入讲解

    MySQL8.0中binlog的深入讲解

    这篇文章主要给大家介绍了MySQL8.0中binlog的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • insert...on duplicate key update语法详解

    insert...on duplicate key update语法详解

    本文主要介绍了insert...on duplicate key update语法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • MySQL8.4设置密码规则为mysql_native_password问题

    MySQL8.4设置密码规则为mysql_native_password问题

    这篇文章主要介绍了MySQL8.4设置密码规则为mysql_native_password问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • MySQL的match函数在sp中使用BUG解决分析

    MySQL的match函数在sp中使用BUG解决分析

    这篇文章主要为大家介绍了MySQL的match函数在sp中使用BUG解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 浅谈mysql的not exists走不走索引

    浅谈mysql的not exists走不走索引

    在MySQL中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的not exists走不走索引,感兴趣的可以了解一下
    2025-07-07
  • MySQL中预处理语句prepare、execute与deallocate的使用教程

    MySQL中预处理语句prepare、execute与deallocate的使用教程

    这篇文章主要介绍了MySQL中预处理语句prepare、execute与deallocate的使用教程,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-08-08
  • MySQL定位CPU利用率过高的SQL方法

    MySQL定位CPU利用率过高的SQL方法

    当mysql CPU告警利用率过高的时候,我们应该怎么定位是哪些SQL导致的呢,本文将介绍一下定位的方法,文章通过代码示例讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-07-07

最新评论