RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。
LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。 www.2cto.com
HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。
KEY 分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
一般用得多的是range分区和list分区。
分区表的创建
1、RANGE分区
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 ); |
2、 LIST分区
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 , store_id INT ) PARTITION BY LIST(store_id) PARTITION pNorth VALUES IN (3,5,6,9,17), PARTITION pEast VALUES IN (1,2,10,11,19,20), PARTITION pWest VALUES IN (4,12,13,14,18), PARTITION pCentral VALUES IN (7,8,15,16) ); |
Note:LIST分区没有类似如“VALUES LESS THAN MAXVALUE”这样的包含其他值在内的定义。将要匹配的任何值都必须在值列表中找到。
3、 HASH分区
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 , store_id INT ) PARTITION BY HASH( YEAR (hired)) PARTITIONS 4; |
3.1、LINEAR HASH分区
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 , store_id INT ) PARTITION BY LINEAR HASH( YEAR (hired)) PARTITIONS 4; |
Note:线性哈希功能使用的一个线性的2的幂(powers-of-two)运算法则,而常规哈希使用的是求哈希函数值的模数
4、KEY分区
CREATE TABLE tk ( col1 INT NOT NULL , col2 CHAR (5), col3 DATE ) PARTITION BY LINEAR KEY (col1) PARTITIONS 3; |
HASH和KEY分区的管理
2.1)合并HASH或KEY分区
ALTER TABLE … COALESCE PARTITION
Note:对于LINEAR HASH和LINEAR KEY分区同样有效
2.2)添加分区
ALTER TABLE table_name ADD PARTITION PARTITIONS 18;–18比原来值大
3、分区维护
3.1) 重建分区
ALTER TABLE table_name REBUILD PARTITION (p0, p1);
3.2)优化分区
ALTER TABLE table_name OPTIMIZE PARTITION (p0, p1);
3.3)分析分区
ALTER TABLE table_name ANALYZE PARTITION (p0, p1);
3.4)检查分区
ALTER TABLE table_name CHECK PARTITION (p0, p1);