一,MySQL分区
分区是指根据一定的规则,数据库把一个表分解成多个更小的、更容易管理的部分。就访问数据库的应用而言,逻辑上只有一个表或一个索引,但是实际上这个表可能由数十个物理分区对象组成,每个分区都是一个独立的对象,可以独自处理,可以作为表的一部分进行处理。分区对应用来说完全是透明的,不影响应用的业务逻辑。
MySQL分区的优点主要包括以下4个方面。
1,和单个磁盘或者文件系统分区相比,可以存储更多数据。
2,优化查询。在where子句中包含分区条件时,可以只扫描必要的一个或多个分区来提高查询效率;同时在涉及sum()和count()这类聚合函数的查询时,可以容易地在每个分区上并行处理,最终只需要汇总所有分区得到的结果。
3,对于已经过期或者不需要保存的数据,可以通过删除与这些数据有关的分区来快速删除数据。
4,跨多个磁盘来分散数据查询,以获得更大的查询吞吐量。
可以通过命令行查看是否支持分区。
mysql> show variables like '%partition%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| have_partitioning | YES |
+-------------------+-------+
1 row in set
mysql>
二,分区类型
1,Range分区
基于一个给定连续区间范围,把数据分配到不同的分区。
即,按照range分区的表示利用取值范围将数据分成分区,区间要连续并且不能互相重叠。
range分区功能适合以下两种情况。
1,当需要删除过期的数据时,只需要简单的删除对应分区的数据。对应具有上百万条记录的表来说,删除分区要比运行一个delete语句有效得多。
2,经常运行包含分区键的查询,MySQL可以很快地确定只有某一个或者某些分区需要扫描,因为其他分区不可能包含有符合where子句的任何记录。
2,list分区
类似range分区,区别在list分区是基于枚举出的值列表分区,range是基于给定的连续区间范围分区。
3,coloumns分区
coloumns分区可以细分为range coloumns分区和list coloumns分区,range coloumns分区和list coloumns分区都支持整数、日期时间、字符串三大数据类型
对比range分区和list分区,coloumns分区的亮点除了支持数据类型增加之外,另外一大亮点是coloumns分区还支持多列分区。
4,hash分区
hash分区主要用来分散热点读,确保数据在预先确定个数的分区中尽可能平均分布。对一个表执行hash分区时,MySQL会对分区键应用一个散列函数,以此确定数据应答放在N个分区中的哪个分区中。
5,key分区
安装key进行分区非常类似于安装hash进行分区,只不过hash分区允许使用用户自定义的表达式,而key分区不允许使用用于自定义的表达式,需要使用MySQL服务器提供的hash函数;同时hash分区只支持整数分区,而key分区支持用除blob or text类型外其他类型的列作为分区键。
三,MySQL分区处理null值的方式
MySQL不禁止在分区键值上使用null,分区键可能是一个字段或者一个用户自定义的表达式。一般情况下,MySQL的分区把null当做零值,或者一个最小值进行处理。
四,参考资料
《深入浅出MySQL 数据库开发、优化与管理维护》