Mysql表如何按照日期字段的年月分區(qū)
一、創(chuàng)鍵表時直接設(shè)置分區(qū)
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) );
二、已有表分區(qū)
1、分區(qū)的前置條件
確保主鍵或唯一鍵包含分區(qū)鍵,若已經(jīng)創(chuàng)建表可以修改
ALTER TABLE your_table_name DROP PRIMARY KEY; ALTER TABLE your_table_name ADD PRIMARY KEY (id, xxdate);
2、分區(qū)操作
查詢需要分區(qū)的日期字段所含有的年月
SELECT DISTINCT DATE_FORMAT(xxdate, '%Y-%m') AS YM FROM your_table_name ORDER BY YM;
根據(jù)上面sql語句查詢的年月數(shù)據(jù)創(chuàng)建分區(qū)
# 我這只有202307、202308兩個月數(shù)據(jù) 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 命中一個目標(biāo)分區(qū)則分區(qū)成功,如:partitions列的值為 p2023_07
四、注意
如果有新的月份分區(qū)需要增加,則需要手動去修改,否則歸為p_max分區(qū)影響查詢效率
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) );
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于MySQL的整型數(shù)據(jù)的內(nèi)存溢出問題的應(yīng)對方法
這篇文章主要介紹了關(guān)于MySQL的整型數(shù)據(jù)的內(nèi)存溢出問題的應(yīng)對方法,作者還列出了MySQL所支持的整型數(shù)據(jù)的存儲空間支持大小,需要的朋友可以參考下2015-05-05MySql用DATE_FORMAT截取DateTime字段的日期值
MySql截取DateTime字段的日期值可以使用DATE_FORMAT來格式化,使用方法如下2014-08-08mysql之validate_password_policy的使用
這篇文章主要介紹了mysql之validate_password_policy的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05