【问题标题】:how to create Dynamic number of partitions using key based table partitioning in MYSQL?如何在 MYSQL 中使用基于键的表分区创建动态分区数?
【发布时间】:2023-03-18 09:15:01
【问题描述】:

我正在尝试使用 mysql 创建分区表,但我不想指定分区数。例如,在给定的表中,每个区域我将有超过 10 万条记录。我不知道这些地区。他们稍后会来。所以分区的数量应该根据区域增加,但即使我插入具有不同值的多行,下面的语法也会创建单个分区。

我没有提到分区数。

  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);

【问题讨论】:

    标签: mysql partitioning data-partitioning


    【解决方案1】:

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

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

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

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

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

    您可能希望使用 LIST 分区,这样您就可以控制每个区域存储在哪个分区中。同样,您可以使用 ALTER TABLE 更改分区定义,这样您就可以支持新的区域。

    我还要评论说根本没有必要使用分区。许多开发人员高估了分区的帮助程度。更有可能的是,简单地正确使用索引就足以为您的查询提供高性能。

    【讨论】:

      【解决方案2】:

      如果您的目标是提高性能,PARTITION BY KEY()LIST()HASH() 可能毫无用处。相反,拥有以region 开头的合适索引也可以。

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

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

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

      更多discussion.

      【讨论】:

        猜你喜欢
        • 2012-11-30
        • 1970-01-01
        • 2021-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-24
        相关资源
        最近更新 更多