表分区
表分区的介绍
原本的表文件都是以完整的形式存储在磁盘中的,而表分区则是指将一张表的数据拆分成多个磁盘文件,然后放到磁盘中存储。
需要去检索一条数据时,无需对一个完整的数据文件从头到尾做扫描,而只需要对某个分区文件进行扫描,能够在一定程度上提高性能。
- 相较于使用单个文件存储表数据,表分区技术可以打破单个磁盘分区的容量限制。
- 对于一些失效数据,如三年前的数据,可以通过快速删除分区的方式清理,效率十分高。
- 能够在一定程度上提升磁盘IO时,检索数据的性能,毕竟只需对一小片磁盘表文件做寻道。
- 支持聚合函数的并行执行,比如sum()、count()这类函数,可以分别统计各分区的数据做汇总。
- 带来更好的数据管理性和可用性,当一个表文件受损时,不会影响其他分区文件中的表数据。
表分区只支持水平划分!!!
表分区的方式
RANGE分区
按范围进行分区
LIST分区
枚举分区,为每个分区分配指定值,比如按照性别,男生一个分区,女生一个分区
HASH分区
- 常规哈希:基于某个整数型字段,直接做取模,最后根据余数来决定数据的分区。
- 线性哈希:基于某个字段哈希之后的哈希值,进行取模运算,最后根据余数来决定数据的分区。
KEY分区
- 表中只存在主键或唯一字段时,分区键必须为主键/唯一键的部分或全部字段,不允许选择其他字段。
- 表中主键、唯一字段同时存在时,分区键必须为主键和唯一键共有的部分或全部字段。
- 当表中不存在主键或唯一键时,分区键可以是除text、blob类型外的任意单个或多个字段。
SUB分区
基于表分区的结果进一步做分区处理
COLUMNS分区
使得range、list分区由多个字段组成,同时支持的字段类型也相对丰富
参考文献
https://fms231.github.io/%E6%95%B0%E6%8D%AE%E5%BA%93/MySQL/%E8%A1%A8%E5%88%86%E5%8C%BA/880c80509e5a/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 冰红茶怪兽!