mysql 范围分区_Mysql 表分区分类

本文详细介绍了MySQL数据库的四种分区类型:Range分区、List分区、Hash分区和Key分区,以及它们的创建和使用示例。通过具体的SQL语句和数据存储分析,展示了如何根据不同的列值范围或离散值进行数据存储,并解释了分区存储的逻辑和原理。
摘要由CSDN通过智能技术生成

针对Mysql数据库,表分区类型简析。

【1】表分区类型

(1)Range分区:按范围分区。按列值的范围区间进行分区存储;比如:id小于10存储在一个分区;id大于10小于20存储在另外一个分区;

(2)List分区:按离散值集合分区。与range分区类似,不过它是按离散值进行分区。

(3)Hash分区:按hash算法结果分区。对用户定义的表达式所返回的hash值来进行分区。

可以写partitions num(分区数目),或直接使用分区语句,比如partition p0 values in … ..

根据分区算法的不同,Hash分区分为一般(取模法)Hash分区和线性(线性Hash规则,详见下线性hash分区内容)Hash分区。

(4)Key分区:Key分区类似于Hash分区,不同点如下:

[1] Key分区允许多列,而Hash分区只允许一列。

[2] 如果在有主键或者唯一键的情况下,Key中分区列可不指定,默认为主键或者唯一键;如果没有,则必须显性指定列。

[3] Key分区对象必须为列,而不能是基于列的表达式。

[4] Key分区和Hash分区的算法不一样。PARTITION BY HASH (expr),MOD取值的对象是expr返回的值,而PARTITION BY KEY (column_list),基于列的MD5值。

(5)子分区:在一级分区的基础上,再进行分区后才存储。

【2】Range分区

Range分区创建表SQL语句:

------------------------------BEGIN RANGE-----------------------按Range范围分区--[1]删除旧表

DROP TABLE`t_partition_by_range`;--[2]创建新表

CREATE TABLE`t_partition_by_range`

(

`id`INT AUTO_INCREMENT PRIMARY KEY,

`sName`VARCHAR(10) NOT NULL,

`sAge`INT(2) UNSIGNED ZEROFILL NOT NULL,

`sAddr`VARCHAR(20) DEFAULT NULL,

`sGrade`INT(2) DEFAULT NULL,

`sStuId`INT(8) DEFAULT NULL,

`sSex`INT(1) UNSIGNED DEFAULT NULL) ENGINE=INNODB

PARTITIONBYRANGE(id)

(

PARTITION p0VALUES LESS THAN(5),

PARTITION p1VALUES LESS THAN(10),

PARTITION p2VALUES LESS THAN(15)

);--[3]添加源数据

INSERT INTOt_partition_by_range

(sName, sAge, sAddr, sGrade, sStuId, sSex)VALUES('wangchao', 8, 'heyang', 1, 1801111, 0),

('suntao', 9, 'weinan', 3, 1803110, 1),

('liuyan', 16, 'hancheng', 2, 20190211, 0),

('xuhui', 22, 'hancheng', 4, 201904107, 1),

('wangqi', 18, 'xian', 10, 201910104, 1),

('baihua', 16, 'nanjing', 8, 201908105, 1),

('xiaoping', 15, 'shenzhen', 6, 20190603, 1);--[4]查询分区信息

SELECTPARTITION_NAME, TABLE_ROWS, PARTITION_METHOD,

PARTITION_EXPRESSION, PARTITION_DESCRIPTION, PARTITION_ORDINAL_POSITIONFROMINFORMATION_SCHEMA.PARTITIONSWHERE TABLE_NAME = 't_partition_by_range';------------------------------END RANGE---------------------

分区存储信息结果:

85a980e9caefc3de720277de77c61edc.png

如上表,理论与实际结合分析:

把id < 5的4个实体(wangchao、suntao、liuyan、xuhui)存储在分区p0;

把5 < id < 10的3个实体(wangqi、baihua、xiaoping)存储在分区p1;

把10 < id < 15的实体会存储在分区p2;

【3】List分区

List分区创建表SQL语句:

------------------------------BEGIN LIST-----------------------按List范围分区--[1]删除旧表

DROP TABLE`t_partition_by_list`;--[2]创建新表

CREATE TABLE`t_partition_by_list`

(

`id`INTAUTO_INCREMENT ,

`sName`VARCHAR(10) NOT NULL,

`sAge`INT(2) UNSIGNED ZEROFILL NOT NULL,

`sAddr`VARCHAR(20) DEFAULT NULL,

`sGrade`INT(2) NOT NULL,

`sStuId`INT(8) DEFAULT NULL,

`sSex`INT(1) UNSIGNED DEFAULT NULL,PRIMARY KEY(`id`, `sGrade`)<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值