Mysql中的range分区

Mysql中的range分区

当表达式的值在给予的范围内时,相应的行就会加入到该分区中。范围应该是连续的,但不范围不重叠,并且使用VALUES LESS THAN操作符。通过使用range分区将表分成4分的例子如下:

CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT NOT NULL,
    store_id INT NOT NULL
)
PARTITION BY RANGE (store_id) (
    PARTITION p0 VALUES LESS THAN (6),
    PARTITION p1 VALUES LESS THAN (11),
    PARTITION p2 VALUES LESS THAN (16),
    PARTITION p3 VALUES LESS THAN (21)
);

在这个例子中,store_id从1至5被存储到p0,6至10被存储到p1,如此类推。注意每个分区都被有序定义,从低到高。这是range类分区的语法要求;

当上面的例子插入一个store_id大于20的数会怎么样呢?数据库会报错,因为并没有定义它存储到哪里,所以解决办法是添加一个更大的数的范围MAXVALUE

CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT NOT NULL,
    store_id INT NOT NULL
)
PARTITION BY RANGE (store_id) (
    PARTITION p0 VALUES LESS THAN (6),
    PARTITION p1 VALUES LESS THAN (11),
    PARTITION p2 VALUES LESS THAN (16),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

MAXVALUE描述了一个整数,它一直大于最大的可用整型值。

发表评论