分区的概念
分区表是一个独立的逻辑表,但是底层是由多个物理子表组成。
分区的主要目的是将数据按照一个较粗的粒度分布在不同的表中,能够快速过滤掉大量数据,提高查询效率。以及方便对数据进行分区管理等。
分区使用场景
适应网站访问量不大,数据量大,对响应时间有要求的场景可以考虑分区。
分区的限制
为什么要使用分区
比如表数据量远大于内存时,索引在空间和维护上的消耗很大,即使用到索引,数据可能也不是按照想要的方式聚集,而且会有大量的碎片产生,最终导致一个查询产生成千上万的随机IO,效率低下,使用分区我们就能快速过滤掉大量不需要的数据,从而提高效率。
分区的类型
RANGE分区
按照表达式值的范围进行分区
RANGE分区详细操作点击这里查看
LIST分区
按照表达式值的集合进行分区
LIST分区详细操作点击这里查看
HASH分区
HASH分区详细操作点击这里查看
常规HASH分区
通过对分区个数进行取模运算,根据得到的余数决定存放在哪一个分区,数据分布相对均匀,但是新增减少分区等操作时,所有数据都要重新计算进行重分布。
线性HASH分区
语法为
PARTITION BY LINEAR HASH( 表达式 ) PARTITIONS num;
线性哈希分区的优点在于增加、删除、合并和拆分分区将变得更加快捷,处理大数据的表比较方便。
KEY分区
KEY分区详细操作点击这里查看
复合分区
基于分区表中的每个分区再次分割。子分区可以是 HASH/KEY 等类型。
参考文章
mysql分区 详解