MySQL8 表分区是指将表的不同部分单独存储在不同的位置,其存储划分规则称为分区函数。 MySQL8 表分区只支持水平分区,即一个表的不同行数据被分配给不同的物理地址,MySQL8 表分区不支持根据列进行垂直分区。
MySQL8 表分区可以按照范围进行分区,范围可选表达式的值应连续,使用 PARTITION BY RANGE 定义。
在线示例:p1分区1-9,p2分区10-99,p3分区大于100。
CREATE TABLE tb_name ( try8_id INT NOT NULL ) PARTITION BY RANGE (try8_id) ( PARTITION p1 VALUES LESS THAN (10), PARTITION p2 VALUES LESS THAN (100), PARTITION p3 VALUES LESS THAN MAXVALUE );
MySQL8 表分区可以按照列表进行分区,每一个列表分区基于一组值,使用 PARTITION BY LIST 定义。
在线示例:p1分区(1,2,3,4,5),p2分区(6,7,8,9,10)。
CREATE TABLE tb_name ( try8_id INT ) PARTITION BY LIST(try8_id) ( PARTITION p1 VALUES IN (1,2,3,4,5), PARTITION p2 VALUES IN (6,7,8,9,10) );
范围列分区类似于范围分区,使您能够基于多个列值的范围来分区,使用 PARTITION BY RANGE COLUMNS 定义。
在线示例:p1分区a取值1-4、b取值1-9,p2分区a>=5、b>=10。
CREATE TABLE tb_name ( a INT, b INT ) PARTITION BY RANGE COLUMNS(a, b) ( PARTITION p1 VALUES LESS THAN (5, 10), PARTITION p2 VALUES LESS THAN (MAXVALUE, MAXVALUE) );
列表列分区类似于列表分区,使您能够基于多个列值的列表来分区,使用 PARTITION BY LIST COLUMNS 定义。
在线示例:p1分区、p2分区取值如下。
CREATE TABLE tb_name ( try8_name VARCHAR(45) ) PARTITION BY LIST COLUMNS(try8_name) ( PARTITION p1 VALUES IN('北京', '上海', '广州', '深圳'), PARTITION p2 VALUES IN('城市001', '城市002', '城市003', '城市004') );
MySQL8 表分区可以按照哈希值分区,用于确保数据在预定数量的分区之间均匀分布,使用 PARTITION BY HASH 定义。
在线示例:使用 3 个分区如下。
CREATE TABLE tb_name ( id INT NOT NULL, try8_id INT ) PARTITION BY HASH(try8_id) PARTITIONS 3;
MySQL8 表分区可以按照主键/唯一键分区,用于确保数据在预定数量的分区之间均匀分布,使用 PARTITION BY KEY 定义。
在线示例:使用 3 个分区如下。
CREATE TABLE tb_name ( try8_id INT NOT NULL PRIMARY KEY ) PARTITION BY KEY() PARTITIONS 3;
MySQL8 表分区可以按照复合分区,即分区表内进一步分区,也称为:子分区。
在线示例:总计 6 个复合子分区如下。
CREATE TABLE tb_name (try8_id INT, try8_date DATE) PARTITION BY RANGE( YEAR(try8_date) ) SUBPARTITION BY HASH( TO_DAYS(try8_date) ) SUBPARTITIONS 2 ( PARTITION p1 VALUES LESS THAN (2000), PARTITION p2 VALUES LESS THAN (2020), PARTITION p3 VALUES LESS THAN MAXVALUE );
MySQL8教程 - MySQL8 表分区,主要用于介绍 MySQL 和 MySQL8 数据库,从 MySQL8 表分区介绍开始,逐步到 MySQL8 表分区类型和在线示例等,通篇实用易懂,让 MySQL8 入门更加快速和简单。
《MySQL8教程》主打原创、全部免费,欢迎学习和转载,如需交流请加微信号:try8_cn。