如何在 MYSQL 中使用基于键的 table 分区创建动态分区数?

how to create Dynamic number of partitions using key based table partitioning in MYSQL?

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

我没有提到分区数。

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

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

If you do not include a PARTITIONS clause, the number of partitions defaults to 1.

相同的行为适用于 KEY 分区。

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

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

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

我也会评论说完全没有必要使用分区。许多开发人员高估了分区的作用。更有可能的是,只需正确使用索引就足以为您的查询提供高性能。

如果您的目标是提高性能,

PARTITION BY KEY()LIST()HASH() 可能毫无用处。相反,让 suitable index(es) 以 region 开头也可以。

不行,遇到新的就添加新的分区是不现实的"regions"。

每个分区只有 10 万行,您的 table 几乎没有资格与 PARTITIONing 打扰。

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

更多 discussion .