- RANGE分区:按范围进行分区的表将进行分区,以使每个分区都包含行,分区的表达式值位于给定范围内。范围应该是连续的,但不能重叠,并且是使用VALUES LESS THAN运算符定义的 。
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)
);
- LIST分区:MySQL中的列表分区在很多方面类似于范围分区。与范围分区一样,必须明确定义每个分区。两种类型的分区之间的主要区别在于,在列表分区中,每个分区都是基于一组值列表中的一个而不是一组连续范围中的列值的成员资格来定义和选择的。
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)
);
- COLUMNS分区
COLUMNS分区是RANGE和LIST分区的变种。
RANGE COLUMNS分区和LIST COLUMNS分区都支持使用非整数列来定义值范围或列表成员
1:数值:TINYINT、 SMALLINT、 MEDIUMINT、 INT (INTEGER)、 BIGINT
2:字符:CHAR、VARCHAR、BINARY、 VARBINARY
3:日期:DATE 和 DATETIME.CREATE TABLE customers_1 (
first_name VARCHAR(25),
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE
)
PARTITION BY LIST COLUMNS(city) (
PARTITION pRegion_1 VALUES IN('Oskarshamn', 'Högsby', 'Mönsterås'),
PARTITION pRegion_2 VALUES IN('Vimmerby', 'Hultsfred', 'Västervik'),
PARTITION pRegion_3 VALUES IN('Nässjö', 'Eksjö', 'Vetlanda'),
PARTITION pRegion_4 VALUES IN('Uppvidinge', 'Alvesta', 'Växjo')
); LIST分区变种
CREATE TABLE customers_3 (
first_name VARCHAR(25),
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE
)
PARTITION BY RANGE COLUMNS(renewal) (
PARTITION pWeek_1 VALUES LESS THAN('2010-02-09'),
PARTITION pWeek_2 VALUES LESS THAN('2010-02-15'),
PARTITION pWeek_3 VALUES LESS THAN('2010-02-22'),
PARTITION pWeek_4 VALUES LESS THAN('2010-03-01')
); RANGE分区变种
- HASH分区:分区依据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(store_id)
PARTITIONS 4;
- KEY 分区:按KEY分区类似于按HASH分区,除了在HASH分区采用用户定义的表达式的情况下,用于KEY分区 的哈希函数由MySQL服务器提供。NDB群集 MD5()用于此目的;对于使用其他存储引擎的表,服务器使用其自己的内部哈希功能。
CREATE TABLE k1 (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20)
)
PARTITION BY KEY()
PARTITIONS 2; 主键分区
CREATE TABLE k1 (
id INT NOT NULL,
name VARCHAR(20),
UNIQUE KEY (id)
)
PARTITION BY KEY()
PARTITIONS 2; 唯一键分区