MySQL8 表分区

MySQL8 表分区,MySQL8教程,介绍 MySQL8 数据库表分区等。

【全栈教程】:https://try8.cn/article
教程目录:
教程内容:
最近更新:2023-04-17

一、MySQL8 表分区介绍

MySQL8 表分区是指将表的不同部分单独存储在不同的位置,其存储划分规则称为分区函数。 MySQL8 表分区只支持水平分区,即一个表的不同行数据被分配给不同的物理地址,MySQL8 表分区不支持根据列进行垂直分区。


1.1、MySQL8 表分区须知

  • MySQL8 表分区的唯一支持的存储引擎是 InnoDB;
  • MySQL8 表分区用于一个表的所有数据和索引,不能仅对数据或索引分区;
  • MySQL8 表分区的表必须有一个明确的主键。


1.2、MySQL8 表分区优点

  • 通过 MySQL8 表分区可以存储更多的数据;
  • 通过 MySQL8 表分区可以高效添加和删除指定数据;
  • 通过 MySQL8 表分区可以根据条件优化查询效率。


二、MySQL8 表分区类型

2.1、范围分区

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
);


2.2、列表分区

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)
);


2.3、范围列分区

范围列分区类似于范围分区,使您能够基于多个列值的范围来分区,使用 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)
);


2.4、列表列分区

列表列分区类似于列表分区,使您能够基于多个列值的列表来分区,使用 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')
);


2.5、哈希分区

MySQL8 表分区可以按照哈希值分区,用于确保数据在预定数量的分区之间均匀分布,使用 PARTITION BY HASH 定义。


在线示例:使用 3 个分区如下。

CREATE TABLE tb_name (
    id INT NOT NULL,
    try8_id INT
)
PARTITION BY HASH(try8_id)
PARTITIONS 3;


2.6、主键分区

MySQL8 表分区可以按照主键/唯一键分区,用于确保数据在预定数量的分区之间均匀分布,使用 PARTITION BY KEY 定义。


在线示例:使用 3 个分区如下。

CREATE TABLE tb_name (
    try8_id INT NOT NULL PRIMARY KEY
)
PARTITION BY KEY()
PARTITIONS 3;


2.7、复合分区

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教程 - MySQL8 表分区,主要用于介绍 MySQL 和 MySQL8 数据库,从 MySQL8 表分区介绍开始,逐步到 MySQL8 表分区类型和在线示例等,通篇实用易懂,让 MySQL8 入门更加快速和简单。


《MySQL8教程》主打原创、全部免费,欢迎学习和转载,如需交流请加微信号:try8_cn。