【为什么分区】
在大数据操作时,将数据表分而治之,将一张数据量很大的表分为一个更小的操作单元,每一个操作单元都会有一个单独的名称。同时,对于程序开发人员来说,分区和没有分区是一样的,通俗来说,mysql分区对于程序应用是透明的,只是数据库对数据的一次重新整理操作。
分区作用:
(1)提升性能。
分区的最终目的是提升性能,分区完成后,mysql针对每个分区生成特定数据文件和索引文件,检索时通过检索特定的部分数据,因此更好的执行和维护数据库。这是因为分区后表被指派到不同的物理驱动器上,同时访问多个分区时减少分区物理I/O争用。
(2)易于管理。
分区后,管理数据可以直接管理对应的分区。操作简单,当数据达到百万级别时,直接操作分区远比操作数据表来的更加直接。
(3)容错
分区完成后,一个分区被破坏后,不会影响其他数据。
【分区方法】
mysql 的分区方法有:RANGE分区、LIST分区、HASH分区、KEY分区。
RANGE分区:根据某个字段的值来进行分区管理,是在直接创建表时进行的分区。eg:
create table emp (empno varchar(20) not null , empname varchar(20), deptno int, birthdate date, salary int ) partition by range(salary) ( partition p1 values less than (1000), partition p2 values less than (2000), partition p3 values less than maxvalue );
LIST分区:类似于RANG分区,不同的是,list分区是一个个散列值,RANG分区是根据某个字段范围进行分区。eg:
create table emp (empno varchar(20) not null , empname varchar(20), deptno int, birthdate date not null, salary int ) partition by list(deptno) ( partition p1 values in (10,15), partition p2 values in (20,25), partition p3 values in (30,35) );
HASH分区:确保数据在预先指定书目的分区中平均分布,分区时指定分区根据的列值和分区数量。eg:
create table emp (empno varchar(20) not null , empname varchar(20), deptno int, birthdate date not null, salary int ) partition by hash(year(birthdate)) partitions 4;
KEY分区:类似于HASH分区,区别于KEY分区只支持计算一列或多列,MySQL服务器提供其自身哈希函数,必须有一列或者多列包涵整数值。eg:
create table emp (empno varchar(20) not null , empname varchar(20), deptno int, birthdate date not null, salary int ) partition by key(birthdate) partitions 4;
【分区的管理操作方法】
删除分区:
alter table emp drop partition p1;
不可以删除hash或者key分区。
一次性删除多个分区,alter table emp drop partition p1,p2;
增加分区:
alter table emp add partition (partition p3 values less than (4000));
alter table empl add partition (partition p3 values in (40));
分解分区:
Reorganizepartition关键字可以对表的部分分区或全部分区进行修改,并且不会丢失数据。分解前后分区的整体范围应该一致。
alter table te
reorganize partition p1 into
(
partition p1 values less than (100),
partition p3 values less than (1000)