表分区的介绍

原本的表文件都是以完整的形式存储在磁盘中的,而表分区则是指将一张表的数据拆分成多个磁盘文件,然后放到磁盘中存储。
需要去检索一条数据时,无需对一个完整的数据文件从头到尾做扫描,而只需要对某个分区文件进行扫描,能够在一定程度上提高性能。

  • 相较于使用单个文件存储表数据,表分区技术可以打破单个磁盘分区的容量限制。
  • 对于一些失效数据,如三年前的数据,可以通过快速删除分区的方式清理,效率十分高。
  • 能够在一定程度上提升磁盘IO时,检索数据的性能,毕竟只需对一小片磁盘表文件做寻道。
  • 支持聚合函数的并行执行,比如sum()、count()这类函数,可以分别统计各分区的数据做汇总。
  • 带来更好的数据管理性和可用性,当一个表文件受损时,不会影响其他分区文件中的表数据。

表分区只支持水平划分!!!

表分区的方式

RANGE分区

按范围进行分区

LIST分区

枚举分区,为每个分区分配指定值,比如按照性别,男生一个分区,女生一个分区

HASH分区

  1. 常规哈希:基于某个整数型字段,直接做取模,最后根据余数来决定数据的分区。
  2. 线性哈希:基于某个字段哈希之后的哈希值,进行取模运算,最后根据余数来决定数据的分区。

KEY分区

  • 表中只存在主键或唯一字段时,分区键必须为主键/唯一键的部分或全部字段,不允许选择其他字段。
  • 表中主键、唯一字段同时存在时,分区键必须为主键和唯一键共有的部分或全部字段。
  • 当表中不存在主键或唯一键时,分区键可以是除text、blob类型外的任意单个或多个字段。

SUB分区

基于表分区的结果进一步做分区处理

COLUMNS分区

使得range、list分区由多个字段组成,同时支持的字段类型也相对丰富

参考文献

https://juejin.cn/post/7166500122166034469