文档

如何确定分区个数

更新时间:

本文介绍如何确定HASH分区、List Default Hash分区以及RANGE分区的分区个数。

HASH分区

您可以在创建分区表时多尝试几个分区值,尽量找一个可以使得数据均衡分布的一个值作为分区值。以下命令可以辅助您来评估分区数量。

  • 查看按照ID值分为10个分区后每个分区的数据量。

    select id%10 as part_id , count(1) from table_name group by id%10; 
  • 查看每个ID值对应的数据量。

    select id, count(1) as cnt from table_name group by shop_id order by cnt desc;
说明
  • 对于业务上有连接需求的表,创建分区表时可以采用相同的分区结构,以方便做连接。

  • 规划表结构时,需考虑业务增长场景下对分区表的要求。

  • 您可以通过以下命令来查看分区表中每个分区下大约有多少数据量:

    select * from mysql.innodb_table_stats where table_name like 'table_name#%' order by n_rows desc;

LIST DEFAULT HASH分区

以SaaS的多租户业务表为例,您可以参考以下两种方案来确定分区个数:

  • 一个租户使用一个LIST分区,或者几个租户共用一个LIST分区。

    您可以评估下数据量,每个分区大约500万至1000万条数据。假设每个租户最大数据量为100万,则建议多个租户共用一个LIST分区,如10个租户共用一个LIST分区。

  • 多尝试几个分区值。

    如果取整数不能满足数据分布均衡要求,您可以尝试取质数。如7和13等。

说明
  • 对于业务上有连接需求的表,创建分区表时可以采用相同的分区结构,以方便做连接。

  • 规划表结构时,需考虑业务增长场景下对分区表的要求。

  • 您可以通过以下命令来查看分区表中每个分区下大约有多少数据量:

    select * from mysql.innodb_table_stats where table_name like 'table_name#%' order by n_rows desc;

RANGE分区

RANGE分区一般按照天、月、年三个维度进行分区。对每个分区的数据量要求不严格,主要由业务的实际需求而定。

  • 本页导读 (0)
文档反馈