mysql按日期创建分区表 mysql新建表按月分区

导读:在MySQL中 , 当数据量越来越大时,为了提高查询效率和减少存储空间的浪费 , 我们通常会使用分区技术 。本文将介绍如何新建一张按月分区的表 。
1. 创建主表
首先,我们需要创建一张主表,用于存储所有数据 。例如:
```
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`date` date NOT NULL,
`value` float DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_date` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
其中,id是自增主键,name、value是我们需要存储的数据,date字段用于标记每条数据的时间信息,并且我们创建了一个索引idx_date以便更快地查询数据 。
2. 创建分区表
接下来,我们需要创建分区表,用于按照月份将数据进行分区 。例如:
CREATE TABLE `mytable_part` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
PARTITION BY RANGE (YEAR(date)*100+MONTH(date)) (
PARTITION p202001 VALUES LESS THAN (202002),
PARTITION p202002 VALUES LESS THAN (202003),
PARTITION p202003 VALUES LESS THAN (202004),
【mysql按日期创建分区表 mysql新建表按月分区】PARTITION p202004 VALUES LESS THAN (202005),
PARTITION p202005 VALUES LESS THAN (202006),
PARTITION p202006 VALUES LESS THAN (202007),
PARTITION p202007 VALUES LESS THAN (202008),
PARTITION p202008 VALUES LESS THAN (202009),
PARTITION p202009 VALUES LESS THAN (202010),
PARTITION p202010 VALUES LESS THAN (202011),
PARTITION p202011 VALUES LESS THAN (202012),
PARTITION p202012 VALUES LESS THAN MAXVALUE
);
我们使用PARTITION BY RANGE按照年份和月份将数据进行分区 , 并且创建了12个分区,每个分区代表一个月 。其中 , 最后一个分区p202012的VALUES LESS THAN MAXVALUE表示该分区包含所有大于等于2021年1月的数据 。
3. 插入数据
现在,我们可以向分区表中插入数据了 。例如:
INSERT INTO mytable_part (name, date, value) VALUES ('test', '2020-01-01', 10.0);
这条语句会将一条数据插入到mytable_part表中的p202001分区中 。
4. 查询数据
最后,我们可以查询数据了 。例如:
SELECT * FROM mytable_part WHERE date BETWEEN '2020-01-01' AND '2020-02-01';
这条语句会查询出mytable_part表中2020年1月的所有数据 。
总结:通过以上步骤,我们可以创建一张按月分区的表,并且将数据存储在不同的分区中,从而提高查询效率和减少存储空间的浪费 。

    推荐阅读