一张表的数据在物理层面都是存放在一起的。随着业务增长,当一张表的数据量过大时,会带来不便。而分区可以将一张表从物理层面根据一定的规则将数据划分为多个分区,分区可以单独管理,存放在不同的磁盘,提升效率。
分区表的优点:
- 数据可以跨磁盘/文件系统存储,适合存储大量数据 。
- 数据的管理非常方便,以分区为单位操作数据,不会影响其他分区的正常运行。
- 数据查询上在某些条件可以利用分区裁剪特性,将搜索范围快速定位到特性分区,提升查询性能。
- 对于应用来说,表依然是一个逻辑整体,但数据库可以针对不同的数据分区独立执行管理操作,不影响其他分区的运行。而数据划分的规则即称为分区函数,数据写入表时,会根据运算结果决定写入哪个分区。
- MySQL的分区插件与存储引擎运行在不同的层,因此大部分存储引擎都可以利用MySQL的分区特性,只有少数存储引擎(merge,CSV,federated)不支持分区特性。若某张表使用的分区特性,则所有的分区都需要使用相同的存储引擎,且分区特性会同时应用到数据和索引上。
MySQL的分区类型:
一、分区的类型
1. Range partition(范围分区)
2. List partition(列表分区)
3. Hash partition(哈希分区)
4. Key partition(键值分区)
二、subparitioning(子分区)
三、分区的基本维护
一、分区的类型
- Range partition(范围分区)
Range partition是按照分区表达式的运算结果,判断结果落在某个范围内,从而将数据存储在对应的分区。各个分区定义之间需要连续且不能重叠,范围分区通过partition by range子句定义,而分区的范围通过values less than子句划分。
例:定义一个员工表,根据员工ID分区,110号员工一个分区,1120号员工一个分区,依次类推,共建立4个分区:
create table employees (
id int not null primary key,
first_name varchar(30),
last_name varchar(30))
partition by range(id)(
partition p0 values less than (11),
partition p1 values less than (21),
partition p2 values less than (31),
partition p3 values less than (41)
现在随便插入几条数据:
insert into employees values(1,'Vincent','Chen');
insert into employees values(6