1. 什么是分区表?数据库
分区表,是指根据必定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,可是底层倒是由多个物理分区组成。服务器
2,分区表原理。函数
存储引擎管理分区的各个底层表和管理普通表同样,全部底层表都必须使用相同的引擎,从存储引擎来看,底层表和普通表么有任何不一样。对用户来讲,分区表是一个独立的逻辑表,可是底层由多个物理子表组成。实现分区的代码其实是对一组底层表句柄对象的封装,对分区表的请求,都会经过句柄对象转化成对存储引擎的接口调用。分区对SQL层来讲是一个彻底封装底层实现的黑盒子,对应用层是透明的
3.应用场景
当数据量很是大时(表的容量到达GB或者是TB),若是仍然采用索引的方式来优化查询,因为索引本生的消耗以及大量的索引碎片的产生,查询的过程会致使大量的随机I/O的产生,分区表能够分布在不一样物理设备上,避免某些特殊的瓶颈,能够对某个分区进行独立恢复备份。优化
4,分区表优势spa
1)分区表的数据能够分布在不一样的物理设备上,从而高效地利用多个硬件设备。
2)和单个磁盘或者文件系统相比,能够存储更多数据
3)优化查询。在where语句中包含分区条件时,能够只扫描一个或多个分区表来提升查询效率;涉及sum和count语句时,也能够在多个分区上并行处理,最后汇总结果。
4)分区表更容易维护。例如:想批量删除大量数据能够清除整个分区。
5)可使用分区表来避免某些特殊的瓶颈对象
5,分区表的限制因素索引
1)一个表最多只能有1024个分区
2) MySQL5.1中,分区表达式必须是整数,或者返回整数的表达式。在MySQL5.5中提供了非整数表达式分区的支持。
3)若是分区字段中有主键或者惟一索引的列,那么多有主键列和惟一索引列都必须包含进来。即:分区字段要么不包含主键或者索引列,要么包含所有主键和索引列。
4)分区表中没法使用外键约束
5)MySQL的分区适用于一个表的全部数据和索引,不能只对表数据分区而不对索引分区,也不能只对索引分区而不对表分区,也不能只对表的一部分数据分区。接口
6. MySQL支持的分区类型hash
1,range分区:
按照RANGE分区的表是经过以下一种方式进行分区的,每一个分区包含那些分区表达式的值位于一个给定的连续区间内的行。
2,list分区:
LIST分区中每一个分区的定义和选择是基于某列的值从属于一个值列表集中的一个值,而RANGE分 区是从属于一个连续区间值的集合。
3,hash分区:
HASH分区主要用来确保数据在预先肯定数目的分区中平均分布,你所要作的只是基于将要被哈希的列值指定一个列值或表达式,以 及指定被分区的表将要被分割成的分区数量。
4,key分区:
按照KEY进行分区相似于按照HASH分区,除了HASH分区使用的用 户定义的表达式,而KEY分区的 哈希函数是由MySQL 服务器提供。
5,子分区:it
子分区是分区表中每一个分区的再次分割,子分区既可使用HASH希分区,也可使用KEY分区。这 也被称为复合分区(composite partitioning)。