mysql 创建分区表

介绍:

根据所使用的不同分区规则可以分成几大分区类型。

RANGE 分区:

基于属于一个给定连续区间的列值,把多行分配给分区。

LIST 分区:

类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

HASH分区:

基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL中有效的、产生非负整数值的任何表达式。

KEY
分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

复合分区:

基于RANGE/LIST 类型的分区表中每个分区的再次分割。子分区可以是 HASH/KEY 等类型。

无论哪种类型的分区,如果表中存在主键或唯一索引时,分区列必须是唯一索引的一个组成部分。

一、创建测试表

CREATE TABLE `test`.`messages` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `content` VARCHAR(50) NULL,
    `createtimeInt` INT NOT NULL,
    `createtime` DATETIME NOT NULL,
    PRIMARY KEY (`id` , `createtimeInt`)
) PARTITION BY RANGE (createtimeInt) PARTITIONS 5 (
PARTITION part0 VALUES LESS THAN (202012) , 
PARTITION part1 VALUES LESS THAN (202101) , 
PARTITION part2 VALUES LESS THAN (202102) , 
PARTITION part3 VALUES LESS THAN (202103) , 
PARTITION part4 VALUES LESS THAN (202104));

二、添加测试数据

INSERT INTO `test`.`messages` (`id`, `content`, `createtimeInt`,`createtime`) VALUES ('1', 'hi', '202012','2020-12-01');
INSERT INTO `test`.`messages` (`id`, `content`, `createtimeInt`,`createtime`) VALUES ('2', 'hi2', '202012','2020-12-28');

INSERT INTO `test`.`messages` (`id`, `content`, `createtimeInt`,`createtime`) VALUES ('3', 'hi', '202101','2021-01-01');
INSERT INTO `test`.`messages` (`id`, `content`, `createtimeInt`,`createtime`) VALUES ('4', 'hi2', '202101','2021-01-28');

INSERT INTO `test`.`messages` (`id`, `content`, `createtimeInt`,`createtime`) VALUES ('5', 'hi', '202102','2021-02-01');
INSERT INTO `test`.`messages` (`id`, `content`, `createtimeInt`,`createtime`) VALUES ('6', 'hi2', '202102','2021-02-28');

三、测试语句是否运用了分区

EXPLAIN PARTITIONS SELECT * FROM `test`.`messages` WHERE createtimeInt=202012;#只从分区1中遍历数据
EXPLAIN PARTITIONS SELECT * FROM `test`.`messages` WHERE id>0;#从所有分区遍历数据

mysql 创建分区表

mysql 创建分区表

mysql查看当前分区表的情况:

SELECT
partition_name part,
partition_expression expr,
partition_description descr,
table_rows
FROM information_schema.partitions WHERE
table_schema = SCHEMA()
AND table_name='messages';

mysql 创建分区表

上一篇:Benchmarking Apache Kafka, Apache Pulsar, and RabbitMQ: Which is the Fastest?


下一篇:MATLAB TCP 持续通信收发信息解决方案