1、分区概述
分区键:根据某个区间值(或者范围值)、特定值列表或者hash函数值执行数据的聚集,让数据根据规则分布在不同的分区中,让一个大对象变成一些小对象。
用show variables命令确定当前的mysql是否支持分区。
show variables like '%partition%'
用show plugins命令能检查当前版本是否安装了分区插件。
MySQL支持MyISAM、InnoDB、Memory等存储引擎创建分区,不支持使用merge或csv存储引擎来创建分区。
5.1中,同一个分区表的所有分区必须使用同一个存储引擎,即同一个表上,不能对一个分区使用MyISAM引擎,对另一个分区使用innoDB
可以在同一个MySQL服务器中,甚至同一个数据库中,对于不同的分区表使用不同的存储引擎。
分区表设置存储引擎,只能用[storage]engine子句,且必须列在create table语句中的其他任何分区选项之前。
MySQL的分区适用于一个表的所有数据和索引,不能只对表数据分区而不对索引分区;也不能只对索引分区而不对表分区,同时也不能只对表的一部分数据进行分区。MySQL的分区表上创建的索引一定是本地的LOCAL索引。
2、分区类型
RANGE分区:基于一个给定连续区间范围,把数据分配到不同的分区
LIST分区:基于枚举出的值列表分区,RANGE是基于给定的连续区间范围分区。
HASH分区:基于给定的分区个数,把数据分配到不同的分区。
KEY分区:类似于HASH分区。
不能使用主键/唯一键字段之外的其他字段分区。数据库和表名区分大小写,分区的名字是不区分大小写的。
(1)range分区
利用取值范围将数据分成分区,区间要连续并且不能互相重叠,使用values less than操作符进行分区定义。
(2)list分区
从一个枚举列表的值的集合,而range分区是从属于一个连续区间值的集合。
(3)columns分区
分为range columns和list columns
(4)hash分区
分散热点读!确保数据在预先确定个数的分区中尽可能平均分布。
常规hash分区取模和线性hash分区线性的2的幂的运算法则
(5)key分区
不允许使用用户自定义的表达式,需要使用MySQL服务器提供的hash函数。支持除blob or text类型外其他的列作为分区键。
(6)子分区
分区表中对每个分区的再次分割。支持对已经通过range或者list分区了的表再进行子分区,子分区既可以使用hash分区,也可以使用key分区。
3、mysql分区处理NULL值的方式
(1)mysql不禁止在分区键上使用null,一般mysql的分区把null当做0值,或者一个最小值进行处理。
(2)range分区中,null被当做最小值来处理;
list分区中,null值必须初夏你在枚举列表中,否则不被接受
hash/key分区中,null值会被当做0值来处理。
4、分区管理