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

标签 mysql partitioning data-partitioning

我正在尝试使用 mysql 创建分区表,但我不想指定分区数。例如,在给定的表中,我将为每个区域提供超过 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 更改分区定义,这样您就可以支持新区域。

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

关于mysql - 如何在 MYSQL 中使用基于键的表分区创建动态分区数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46924985/

相关文章:

mysql - [索引列分区的好处]

c - 打印分区表——C程序

algorithm - 找到两个具有相等总和的子集时出错

mysql - OSX ld : library not found for -lssl

mysql - 对两个表进行分区的最佳策略是什么?

java - java中使用subList对数据进行分区

r - 在 R 中使用sample.split 不正确地分割数据以及逻辑回归问题

如果表值为 0,PHP/MySQL 重定向页面

php - 这段 php 代码有什么问题?左外连接

php - MySQL、PHP 在负载下重复