暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何确定分区个数

芬芳 2023-10-20
183

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论