龙空技术网

MySQL分区表-按月份归类

Pygo 639

前言:

今天兄弟们对“mysql对已有表分区”大约比较看重,兄弟们都需要学习一些“mysql对已有表分区”的相关文章。那么小编同时在网摘上搜集了一些关于“mysql对已有表分区””的相关知识,希望大家能喜欢,我们快快来学习一下吧!

MySQL单表数据量,建议不要超过2000W行,否则会对性能有较大影响。最近接手了一个项目,单表数据超7000W行,一条简单的查询语句等了50多分钟都没出结果,实在是难受,最终,我们决定用分区表。

建表

一般的表(innodb)创建后只有一个 idb 文件:

create table normal_table(id int primary key, no int)查看数据库文件:normal_table.ibd  

创建按月份分区的分区表,注意!除了常规主键外,月份字段(用来分区的字段)也必须是主键:

create table partition_table(id int AUTO_INCREMENT, create_date date, name varchar(10), primary key(id, create_date)) ENGINE=INNODB DEFAULT CHARSET=utf8 partition by range(month(create_date))(partition quarter1 values less than(4),partition quarter2 values less than(7),partition quarter3 values less than(10),partition quarter4 values less than(13));查看数据库文件:partition_table#p#quarter1.ibd  partition_table#p#quarter2.ibd  partition_table#p#quarter3.ibd  partition_table#p#quarter4.ibd
插入
insert into partition_table(create_date, name) values("2021-01-25", "tom1");insert into partition_table(create_date, name) values("2021-02-25", "tom2");insert into partition_table(create_date, name) values("2021-03-25", "tom3");……insert into partition_table(create_date, name) values("2021-11-25", "tom11");insert into partition_table(create_date, name) values("2021-12-25", "tom12");
查询
select count(*) from partition_table;> 12查询第二个分区(第二季度)的数据:select * from partition_table PARTITION(quarter2);4   2021-04-25  tom45   2021-05-25  tom56   2021-06-25  tom6
删除

当删除表时,该表的所有分区文件都会被删除

标签: #mysql对已有表分区