创建表分区
create table teacher (id varchar(20) not null , name varchar(20), age varchar(20), birthdate date not null, salary int ) partition by range(year(birthdate)) ( partition p1 values less than (1970), partition p2 values less than (1990), partition p3 values less than maxvalue );
如果表已经创建完毕,需要后期分区:
ALTER TABLE teacher partition by range(year(birthdate)) ( partition p1 values less than (1970), partition p2 values less than (1990), partition p3 values less than maxvalue );
查看数据文件
准备数据
创建存储过程,因为要根据生日birthday进行range分区,因此分别插入不同日期(birthday字段)的数据:
begin declare i int; set i=0; while i<1000 do insert into teacher(id,name,age,birthdate,salary) values(i,"leo","30","2016-08-05",3000); set i=i+1; end while; end
看看数据库文件的变化过程:
插入生日小于1970年的数据时,p1文件由96k变成了144k,因此可以判断这部分数据存放在该区域。
插入生日大于1970年且小于1990年的数据时:
插入生日大于19900年的数据时:
数据文件
上面看到在分区完成后多个4个文件,分别是idb和frm格式,下面来说说这两种数据文件。
.ibd文件和.ibdata文件:这两种文件都是存放innodb数据的文件,之所以用两种文件来存放innodb的数据,是因为innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是用独立表空间存放存储数据。独立表空间存储方式使用.ibd文件,并且每个表一个ibd文件。共享表空间存储方式使用.ibdata文件,所有表共同使用一个ibdata文件。