首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MYSQL中使用基于键的表分区来创建动态分区数?

问如何在MYSQL中使用基于键的表分区来创建动态分区数?
EN

Stack Overflow用户
提问于 2017-10-25 05:59:59
回答 2查看 1.7K关注 0票数 2

我正在尝试使用mysql创建分区表,但我不想指定分区的数量。例如,在给定的表中,每个区域的记录将超过100 k。我不知道地区。他们会晚点来的。因此,分区的数量应该根据区域增加,但下面的语法是创建单个分区,即使我插入了具有不同值的多个行。

我没有提到分区数。

代码语言:javascript
复制
  CREATE TABLE `members` (
      `firstname` varchar(25) NOT NULL,
      `lastname` varchar(25) NOT NULL,
      `username` varchar(16) NOT NULL,
      `email` varchar(35) DEFAULT NULL,
      `region` varchar(10) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
     PARTITION BY KEY (region);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-25 06:45:10

https://dev.mysql.com/doc/refman/5.7/en/partitioning-hash.html说:

如果不包括分区子句,则分区数默认为1。

同样的行为也适用于键分区。

您似乎认为每个区域都需要一个分区。没有。每个分区中可能存储了多个区域。当然,如果您有8个分区,但是存储了12个不同的区域,则这必须是正确的。这不是问题。

您可以使用ALTER来更改键或散列分区方法中的分区数,但在再次使用ALTER之前,它将保持不变,这将在新的分区集上重新分配行。

相反,您可能希望使用列表分区,以便控制存储在哪个分区中的每个区域。同样,您可以使用ALTER来更改分区定义,以便支持新的区域。

我还要评论一下,根本没有必要使用分区。许多开发人员高估了分区将有多大帮助。更有可能的是,仅仅正确地使用索引就足以使您的查询具有高性能。

票数 0
EN

Stack Overflow用户

发布于 2017-10-27 14:03:31

如果您的目标是添加性能,那么PARTITION BY KEY()、LIST()或HASH()可能是无用的。相反,以region开头的适当索引(Es)也同样适用。

不,当您遇到新的“区域”时,添加新分区是不实际的。

每个分区只有100 K行,您的表几乎没有资格使用PARTITIONing。

PARTITIONs的数量是有限制的。硬极限为8K,实际极限为50。

更多的http://mysql.rjweb.org/doc.php/partitionmaint。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46924985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档