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