本文介绍如何确定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分区一般按照天、月、年三个维度进行分区。对每个分区的数据量要求不严格,主要由业务的实际需求而定。
文档内容是否对您有帮助?