按月划分mysql表

  • 本文关键字:mysql 划分 mysql
  • 更新时间 :
  • 英文 :


我是MySql新手。假设我有一个这样的表:

**Month table**
-----------------
id  month data
1    1    0.5
2    1    0.8
3    2    0.12
4    2    0.212
5    2    1.4
6    3    5.7
7    4    6.8

如何根据月份将其分成不同的表,并使这些表在磁盘中可用?如果可能的话,我以后如何引用这些表呢?例如:

**January table**
-----------------
id   month data
1     1     0.5
2     1     0.8
**February table**
-----------------
id   month  data
1     2     0.12
2     2     0.212
3     2     1.4
**March table**
-----------------
id   month  data
1     3     5.7
**April table**
-----------------
id   month  data
1     4     6.8

等。

谢谢你的帮助。

我查看了分区范围,但我不认为它符合我的目的,因为它不会创建更小的表。我想写一个程序,但不知道从哪里开始。

如果您只想按月加快查询速度,只需在月份或时间戳列中添加索引即可。分区可以加快速度,但也可以减慢速度。

我查看了分区范围,但我不认为它符合我的目的,因为它不会创建更小的表

这是不正确的。

Partitioning将这个概念推进了一步,它允许您根据您可以根据需要设置的规则在文件系统中分布单个表的部分。实际上,表的不同部分作为单独的表存储在不同的位置。

您可以按月将现有表更改为12个分区。如果您已经有一个月列…

alter table month_table
partition by list(month) (
partition January values in (1),
partition February values in (1),
-- etc ---
);

如果你有一个日期或时间戳列,把它变成一个月。

alter table month_table
partition by list(month(created_at)) (
partition January values in (1),
partition February values in (1),
-- etc ---
);

…我以后如何引用这些表

一般情况下,您不会引用单个分区。插入并查询主表。分区的要点是透明的。如果有一个适用的where子句将从相关分区读取。

-- This will read from the February partition.
select * from month_table where "month" = 2;
-- This will read from both the February and March partitions.
select * from month_table where "month" in (2,3);

但是您可以使用分区子句使用分区名称来查询各个分区。

SELECT * FROM month_table PARTITION (January);

除了调试每个分区中的内容外,通常不需要这样做。

最新更新