目录
一、分区表
分区表是一个独立的逻辑表,底层是由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装。对分区表的请求,都会通过句柄对象转化成对存储引擎的接口调用。每一个分区表都有一个使用#分隔命名的表文件。
MySQL在创建表时使用PARTITION BY
子句定义每个分区存放的数据。在执行查询的时候,优化器会根据分区定义过滤那些我们不需要的数据分区,这样就无须查询所有分区,只需要查找包含需要数据的分区就可以了。
分区的一个主要目的是将数据按照一个较粗的粒度分在不同的表中,这样做就可以将相关的数据存放在一起,另外,如果想一次性删除整个分区的数据也会变得更加简单。
二、分区的作用
- 表非常大以至于无法全部放在内存中,或者在表中存在热点数据,也有历史数据;
- 分区表的数据更容易维护,想批量删除大量数据时,可以使用清除整个分区的方式,还可以对一个独立的分区进行优化、检查、修复等操作;
- 分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备;
- 可以通过分区表来避免某些特殊的瓶颈,比如InnoDB单个索引的互斥访问;
- 可以备份和恢复独立的分区;