mysql分区表整理

1. 什么是分区表?

分区表,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。

2,分区表原理。

存储引擎管理分区的各个底层表和管理普通表一样,所有底层表都必须使用相同的引擎,从存储引擎来看,底层表和普通表么有任何不同。对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成。实现分区的代码实际上是对一组底层表句柄对象的封装,对分区表的请求,都会通过句柄对象转化成对存储引擎的接口调用。分区对SQL层来说是一个完全封装底层实现的黑盒子,对应用层是透明的
3.应用场景
当数据量非常大时(表的容量到达GB或者是TB),如果仍然采用索引的方式来优化查询,由于索引本生的消耗以及大量的索引碎片的产生,查询的过程会导致大量的随机I/O的产生,分区表可以分布在不同物理设备上,避免某些特殊的瓶颈,可以对某个分区进行独立恢复备份。

4,分区表优点

1)分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备。
2)和单个磁盘或者文件系统相比,可以存储更多数据
3)优化查询。在where语句中包含分区条件时,可以只扫描一个或多个分区表来提高查询效率;涉及sum和count语句时,也可以在多个分区上并行处理,最后汇总结果。
4)分区表更容易维护。例如:想批量删除大量数据可以清除整个分区。
5)可以使用分区表来避免某些特殊的瓶颈

5,分区表的限制因素

1)一个表最多只能有1024个分区
2) MySQL5.1中,分区表达式必须是整数,或者返回整数的表达式。在MySQL5.5中提供了非整数表达式分区的支持。
3)如果分区字段中有主键或者唯一索引的列,那么多有主键列和唯一索引列都必须包含进来。即:分区字段要么不包含主键或者索引列,要么包含全部主键和索引列。
4)分区表中无法使用外键约束
5)MySQL的分区适用于一个表的所有数据和索引,不能只对表数据分区而不对索引分区,也不能只对索引分区而不对表分区,也不能只对表的一部分数据分区。

6. MySQL支持的分区类型

1,range分区:
按照RANGE分区的表是通过如下一种方式进行分区的,每个分区包含那些分区表达式的值位于一个给定的连续区间内的行。
2,list分区:
LIST分区中每个分区的定义和选择是基于某列的值从属于一个值列表集中的一个值,而RANGE分 区是从属于一个连续区间值的集合。
3,hash分区:
HASH分区主要用来确保数据在预先确定数目的分区中平均分布,你所要做的只是基于将要被哈希的列值指定一个列值或表达式,以 及指定被分区的表将要被分割成的分区数量。
4,key分区:
按照KEY进行分区类似于按照HASH分区,除了HASH分区使用的用 户定义的表达式,而KEY分区的 哈希函数是由MySQL 服务器提供。
5,子分区:

子分区是分区表中每个分区的再次分割,子分区既可以使用HASH希分区,也可以使用KEY分区。这 也被称为复合分区(composite partitioning)。

你可能感兴趣的:(mysql分区表整理)