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的整型数据的内存溢出问题的应对方法

    关于MySQL的整型数据的内存溢出问题的应对方法

    这篇文章主要介绍了关于MySQL的整型数据的内存溢出问题的应对方法,作者还列出了MySQL所支持的整型数据的存储空间支持大小,需要的朋友可以参考下
    2015-05-05
  • CentOS7.6安装MYSQL8.0的步骤详解

    CentOS7.6安装MYSQL8.0的步骤详解

    这篇文章主要介绍了CentOS7.6安装MYSQL8.0的步骤,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • mysql 5.7 zip archive版本安装教程

    mysql 5.7 zip archive版本安装教程

    这篇文章主要为大家详细介绍了mysql 5.7 zip archive版本安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • MySql用DATE_FORMAT截取DateTime字段的日期值

    MySql用DATE_FORMAT截取DateTime字段的日期值

    MySql截取DateTime字段的日期值可以使用DATE_FORMAT来格式化,使用方法如下
    2014-08-08
  • Centos7下安装和配置MySQL5.7.20的详细教程

    Centos7下安装和配置MySQL5.7.20的详细教程

    这篇文章主要介绍了Linux(CentOS7)下安装和配置MySQL5.7.20详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价,需要的朋友可以参考下
    2020-05-05
  • mysql之validate_password_policy的使用

    mysql之validate_password_policy的使用

    这篇文章主要介绍了mysql之validate_password_policy的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • MySQL自增id用完的解决方案

    MySQL自增id用完的解决方案

    MySQL 的自增 ID(Auto Increment ID)是数据库表中最常用的主键类型之一,然而,在一些特定的场景下,自增 ID 可能会达到其最大值,可能会遇到 ID 用尽的问题,所以本文介绍了MySQL自增id用完的解决方案,需要的朋友可以参考下
    2024-12-12
  • WINDOWS下安装MYSQL教程详解

    WINDOWS下安装MYSQL教程详解

    这篇文章主要介绍了WINDOWS下安装MYSQL教程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • MySQL缓存的查询和清除命令使用详解

    MySQL缓存的查询和清除命令使用详解

    这篇文章主要介绍了MySQL缓存的查询和清除命令使用详解,对于一些不常改变数据且有大量相同sql查询的表,查询缓存会显得比较有用一些,需要的朋友可以参考下
    2015-12-12
  • MYSQL EXPLAIN结果解读

    MYSQL EXPLAIN结果解读

    本文主要介绍了MySQL查询中的一些关键字,如:SIMPLE,PRIMARY,UNION,DEPENDENTUNION,UNIONRESULT,SUBQUERY,DEPENDENTSUBQUERY,DERIVED,UNCACHEABLESUBQUERY等,文章详细解析了这些关键字的含义和用途
    2024-10-10

最新评论