mysql创建索引范围的分区

时间:2014-03-06 15:53:45

标签: mysql

假设我有一张桌子cars。并且该表的索引列为'brand'(int)。 目前我有1-100个品牌ID,但是我们说品牌经常被添加。

我想通过品牌索引列创建一个分区,每个分区将构成具有特定品牌的所有汽车,如果我向具有新brand_id的汽车插入新行,它还应该有一个分区(没有完全弄清楚分区是如何工作的)。 那么我该如何为这个现有的表做呢。 为什么每当我在网络中看到分区代码时,您似乎应该像硬编码那样定义范围。

由于

1 个答案:

答案 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