我正在尝试使用 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/