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描述了一个整数,它一直大于最大的可用整型值。