假设我有一张桌子cars
。并且该表的索引列为'brand'(int)。
目前我有1-100个品牌ID,但是我们说品牌经常被添加。
我想通过品牌索引列创建一个分区,每个分区将构成具有特定品牌的所有汽车,如果我向具有新brand_id的汽车插入新行,它还应该有一个分区(没有完全弄清楚分区是如何工作的)。 那么我该如何为这个现有的表做呢。 为什么每当我在网络中看到分区代码时,您似乎应该像硬编码那样定义范围。
由于
答案 0 :(得分:2)
不确定它是否可以按照您想要的方式完成。
如果您想要均匀分发数据,请使用HASH
分区并将计数设置为具有您想要的许多分区。那可能是更好的选择,因为你可以拥有一个只有1辆车的品牌?或许不是吗?
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