数据库分区是一种物理数据库设计技术。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减sql语句的响应时间,同时对于应用来说分区完全是透明的。
MYSQL的分区主要有两种形式:水平分区和垂直分区,也可以成为行分区和列分区。
根据所使用的不同分区规则可以分成几大分区类型。
RANGE 分区:
基于属于一个给定连续区间的列值,把多行分配给分区。
LIST 分区:
类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
HASH分区:
基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL中有效的、产生非负整数值的任何表达式。
KEY
分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
复合分区:
基于RANGE/LIST 类型的分区表中每个分区的再次分割。子分区可以是 HASH/KEY 等类型。
range 分区
1.分区表的创建
根据 birthday 列进行分区,此处分成了3个区
create table employees(
id int not null ,
name varchar(30),
salary int,
birthday date
)
partition by range (year(birthday))(
partition p1 values less than (2019),
partition p2 values less than (2020),
partition p3 values less than (2021)
);
2.插入记录
#插入记录,根据字段 birthday 会存放在不同分区
insert into employees values (1, 'Joe', 123, '2018-01-01');
insert into employees values (2, 'Jack', 123, '2019-01-01');
insert into employees values (3, 'Rose', 123, '2019-03-21');
insert into employees values (4, 'Harry', 123, '2020-01-01');
insert into employees values (5, 'Kobe', 123, '2020-11-01');
3.分区表的管理操作
- 删除分区
#删除分区,相应也删除了分区里的数据
alter table employees drop partition p3;
- 新增分区
#新增分区,只能按照顺序在后面追加分区
alter table employees
add partition (partition p3 values less than (2021));
- 查看分区信息的几种方法
查看创建分区表的 create 方法
show create table employees;
查看 information_schema.partitions 表
select
PARTITION_NAME,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS
from information_schema.PARTITIONS
where
TABLE_SCHEMA = schema() and TABLE_NAME = 'employees';