假设我有一张汽车
table 。该表有一个索引列“brand”(int)。
目前我有 1-100 个品牌 ID,但假设品牌经常被添加。
我想按品牌索引列创建一个分区,每个分区将构成具有特定品牌的所有汽车,如果我向具有新brand_id的汽车插入新行,它也应该有一个分区(没有完全弄清楚分区是如何工作的)。 那么我该如何为这个现有的表做呢? 为什么每次我在网上看到分区代码时,似乎您应该像硬编码一样定义范围。
谢谢
最佳答案
不确定是否可以按照您想要的方式完成。
如果您想要均匀分布数据,请使用HASH
分区并设置一个计数以拥有您想要的多个分区。这可能是更好的选择,因为您可以拥有一个只有一辆车的品牌?或者也许不是?
CREATE TABLE cars (
id INT NOT NULL,
brand_id INT
)
PARTITION BY HASH(brand_id)
PARTITIONS 10;
这将根据brand_id给出10个大小均匀的分区
我知道如何做,即使每个 id 可以有一个新分区。当您通过 RANGE
创建分区时,您可以定义每个分区的范围,如下所示。
CREATE TABLE cars (
id INT NOT NULL,
brand_id INT
PARTITION BY RANGE (brand_id) (
PARTITION p0 VALUES LESS THAN (10),
PARTITION p1 VALUES LESS THAN (25),
PARTITION p2 VALUES LESS THAN (50),
PARTITION p3 VALUES LESS THAN (100),
PARTITION p4 VALUES LESS THAN MAXVALUE
);
这将根据分区范围设置提供 5 个不同大小的分区。
引用:
https://dev.mysql.com/doc/refman/5.1/en/partitioning-range.html https://dev.mysql.com/doc/refman/5.1/en/partitioning-hash.html
关于mysql 创建带有索引范围的分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22229445/