本章节介绍一级分区表的规划和设计,其中主要是一级分区列的选取。

AnalyticDB MySQL 2.0一级分区表采用HASH分区,可指定任意一列(不支持多列)作为分区列。HASH分区通过标准CRC算法计算出CRC值,并将CRC值与分区数作模计算,得出每条记录的分区号。空值的HASH值与字符串-1相同。以下按照优先级从高到底列出一级分区列的选择依据。

  1. 选择值分布均匀的列作为分区列,请勿选择分布不均匀的列作为分区列。
  2. 建议选择一级分区列的数据类型为tinyint、smallint、int、bigint或者varchar。
  3. 如果是多个普通表(不包括维度表)JOIN,则选择参与JOIN的列作为分区列。

    如果是多列JOIN ,则根据查询重要程度或查询性能要求(例如:某SQL的查询频率特别高)来选择分区列,以保证基于分区列的JOIN具有较好的查询性能。

  4. 选择GROUP BY或DISTINCT包含的列作为分区列。
  5. 如果常用的SQL包含某列的等值或IN查询条件,则选择该列作为分区列。以下例子则选择id列作为分区列。
     select * from table where id=123 and …;
     select * from table where user in(1, 2,3);

数据倾斜带来的影响

如果一级分区列选择不合理会导致用户表数据倾斜,带来如SQL查询长尾、后台数据上线超时和单节点资源不足等诸多问题,对查询性能影响非常大也会给用户带来资源的浪费。

如何评估表数据是否倾斜

登录分析型数据库MySQL版控制台,单击监控信息>DB表概览,查看表明细部分,对于存在数据倾斜的表已经标红处理,需要用户及时更换分区列。名字没有标红的表,用户也可以单击表名来查看数据分布。