MySQL表分区(1)范围分区-range

创建表分区

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文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值