我尝试使用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);
答案 0 :(得分:0)
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更改分区定义,以便支持新区域。
我还要评论说根本没有必要使用分区。许多开发人员高估了分区的帮助程度。简单地正确使用索引更有可能为您的查询提供高性能。
答案 1 :(得分:0)
PARTITION BY KEY()
或LIST()
或HASH()
可能毫无用处。相反,使用以region
开头的合适索引也可以。
不,当您遇到新的"区域"时,添加新分区是不切实际的。
每个分区只有100K行,您的表几乎没有资格使用PARTITIONing
。
PARTITIONs
的数量有限制。硬限制为8K;实际限制是50。
更多discussion。