2014-03-06 69 views
2

假设我有一个表cars。并且该表具有“品牌”(int)的索引列。 ,目前我有1-100个品牌ID,但让品牌经常添加。mysql创建分区索引范围

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

谢谢

+1

添加您创建表定义 –

回答

2

不确定它可以以你想要的方式完成。

如果您想要分配数据,请使用HASH分区并设置计数以获得所需的多个分区。这可能是更好的选择,因为你可以只有一辆车的品牌?或者可能不是?

CREATE TABLE cars (
    id INT NOT NULL, 
    brand_id INT 
) 
PARTITION BY HASH(brand_id) 
PARTITIONS 10; 

这会给

林记清楚如何,甚至是否有可能让每个ID的新的分区基础上,brand_id 10个甚至大小的分区。当您通过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

+0

谢谢,但如果我想下一个分区(100 - 200,200-300 ...)会自动生成?我是否必须运行一些cron作业来生成分区,或者mysql是否有一个选项? –