1,MySQL分区表作用

当单表的数据量较大,需要进行定期的数据归档删除时,或者提高查询性能,都可以采用分区;

2,分区表设置

分区的种类

range分区

list分区

hash分区

key分区

range分区

区间分区,常用与跟日期相关的,例如:

create table table_demo (

id int,

create_date datetime

)

partition by range (to_days(create_date)) (

partition p1 values less than (to_days('20200401')),

partition p2 values less than (to_days('20200402'))

)

注意:

range接受整型,所以需要用to_days转换;

如何类型是timestamp,则用unix_timestamp转换;

list分区

和range分区的区别在于,range使用区间,list使用枚举列表,例如:

create table table_demo (

id int,

register_channel int

)

partition by list (register_channel) (

partition p1 values in (1,2,3),

partition p2 values in (4,5,6)

)

注意:

同range一样, list只接受整型

hash分区

对于没有明显特征的值做分区,采用此类进行分区,例如对id进行hash

PARTITION BY HASH(id)

PARTITIONS 4;

注意

hash也是同样只接受整型,然后使用mod partitons计算分区

hash还有另外一种,叫做linear hash,唯一的区别在于其分区算法不是采用mod还是采用linear hash算法

linear hash算法

公式:x mod 2n = x mod n 或者 x mod n +n

例如:5 mod 8 = 5 mod 4 或者 5 mod 4 + 4 = 1 或者 5

这种算法可以方便分区的扩容操作

key分区

跟hash比较类似,但是区别在于:

hash只能使用单列作为分区键,key可以多列;

hash只接受整型,因此非整型需要通过expr计算,key不需要是整型,key会对分区键进行md5算法计算;

key分区默认采用主键作为分区键

PARTITION BY KEY()

PARTITIONS 2;

总结

除了key分区,其他分区方式都只能接受整型,因此可能需要对列采用表达式计算expr(column)

分区键特征不明显可以采用hash,需要考虑分区数变化的采用linear hash,时间相关的可以采用range

3,分区表使用

如何管理RANGE和LIST分区

以该分区表为例

CREATE TABLE members (

id INT,

fname VARCHAR(25),

lname VARCHAR(25),

dob DATE

)

PARTITION BY RANGE( YEAR(dob) ) (

PARTITION p0 VALUES LESS THAN (1970),

PARTITION p1 VALUES LESS THAN (1980),

PARTITION p2 VALUES LESS THAN (1990)

);

1. 删除分区

ALTER TABLE members DROP PARTITION p1;

注意:如果删掉了某分区,则该分区内的数据将全部丢失,不仅如此,在用show create table members\G;命令查看该表的创建语句时将无法看到被删除分区的任何信息。

对于RANGE分区来说,如果删除了p1分区,在插入数据时,如果日期在1970到1980区间之内,则该数据将会被分配到下一个分区,即p2,。

对于LIST分区,如果删除了某一分区,在插入数据时,如果数据属于这一分区,则插入会报错。

如果只是删除数据而不删除该分区的信息,可使用truncate命令

ALTER TABLE members TRUNCATE PARTITION p1;

2. 添加分区

ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000));

注意:使用ADD命令来添加分区,只能在分区列表的末尾添加,具体到本例中,只能添加到1990年以后。

当然,在实际生产环境中,这样的局限性太大,譬如我想将p0分区之前添加一个分区,区间为1960,或者将p1之间再添加一个1975的分区,这时候,用ADD将无法满足此类需求,可使用ALTER TABLE ... REORGANIZE PARTITION命令。

譬如:

ALTER TABLE members REORGANIZE PARTITION p0 INTO (

PARTITION s0 VALUES LESS THAN (1960),

PARTITION s1 VALUES LESS THAN (1970)

);

REORGANIZE命令其实是相当灵活的,不仅能拆分分区,还可以用来合并分区,譬如:

ALTER TABLE members REORGANIZE PARTITION p0,p1,p2,p3 INTO (

PARTITION m0 VALUES LESS THAN (1980),

PARTITION m1 VALUES LESS THAN (2000)

);

注意:

1> 不能使用REORGANIZE PARTITION命令修改表的分区类型,只能通过ALTER TABLE ... PARTITION BY ....语句,譬如:

ALTER TABLE members

PARTITION BY HASH( YEAR(dob) )

PARTITIONS 8;

2> REORGANIZE PARTITION语法如下:

ALTER TABLE tbl_name

REORGANIZE PARTITION partition_list

INTO (partition_definitions);

partition_definitions中分区的范围必须要涵盖partition_list中的分区范围。

如何管理HASH和KEY分区

以该分区表为例

CREATE TABLE clients (

id INT,

fname VARCHAR(30),

lname VARCHAR(30),

signed DATE

)

PARTITION BY HASH( MONTH(signed) )

PARTITIONS 12;

对于HASH分区和KEY分区,并不支持上述RANGE和LIST分区的语法,譬如DROP,TRUNCATE,REORGANIZE分区。

事实上,它只支持一种类型的“分区调整”。

ALTER TABLE clients COALESCE PARTITION 4;

该命令的作用在于将clients表的分区剪裁4个,从12个剪裁到8个。

ALTER TABLE clients ADD PARTITION PARTITIONS 6;

同样,该命令为clients表增加了6个分区,从12个到18个。

mysql 分区表 归档_MySQL分区表相关推荐

  1. mysql 字符串分区_Mysql分区表的原理和优缺点

    分区表的原理 分区表是由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们也可以直接访问各个分区,存储引擎管理分区的各个底层表和管理普通表一样(所有的底层表都必须使用相同的存储引擎),分区表 ...

  2. mysql分区表 缓存_Mysql 分区表-分区操作

    一.查看MySQL是否支持分区 1.MySQL5.6以及之前版本 show variables like '%partition%'; 2.MySQL5.7 show plugins; 二.分区表的分 ...

  3. mysql 分区表 限制_MySQL分区表的局限和限制-阿里云开发者社区

    禁止构建 分区表达式不支持以下几种构建: 存储过程,存储函数,UDFS或者插件 声明变量或者用户变量 算术和逻辑运算符 分区表达式支持+,-,*算术运算,但是不支持DIV和/运算(还存在,可以查看Bu ...

  4. mysql 分区 目的_MySQL分区表最佳实践

    前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表.但是对于应用程序来讲,分区的表和没有分区的表是一样的.换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理 ...

  5. mysql数据库局限性_Mysql分区表局限性总结

    Mysql5.1已经发行很久了,本文根据官方文档的翻译和自己的一些测试,对Mysql分区表的局限性做了一些总结,因为个人能力以及测试环境的原因,有可能有错误的地方,还请大家看到能及时指出,当然有兴趣的 ...

  6. mysql 分区表 限制_Mysql分区表使用的一些限制和需要注意的地方-阿里云开发者社区...

    mysql分区策略都基于两个非常重要的假设:查询都能够过滤(prunning)掉很多额外的分区.分区本身并不会带来很多额外的代价.而事实证明,这两个假设在某些场景下会有问题.下面介绍一些可能会遇到的问 ...

  7. MySQL分区总结_mysql分区表小结2

    更改分区类型 如果想更改分区类型,只需调用alter table partition by即可,比oracle要简便: --将range分区改为key分区 CREATE TABLE trb3 (id ...

  8. mysql 分区 导出_mysql普通表变成分区表导入导出

    环境:tidb.linux 1.先确认主键.创建分区表(用于代替原表) SELECT column_name FROM INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` WH ...

  9. mysql表分区数量限制_MySQL分区表的局限和限制详解

    禁止构建 分区表达式不支持以下几种构建: 存储过程,存储函数,UDFS或者插件 声明变量或者用户变量 可以参考分区不支持的SQL函数 算术和逻辑运算符 分区表达式支持+,-,*算术运算,但是不支持DI ...

最新文章

  1. 感知哈希算法——找出相似的图片
  2. POST 变为AJAX提交代码。
  3. Forrester:建立企业数据库安全计划
  4. Python 数据分析三剑客之 Pandas(八):数据重塑、重复数据处理与数据替换
  5. php7 获取文件类型,太简单了!PHP获取文件扩展名的7中方法
  6. GPS 校验和 代码_Linux recovery 移除签名校验
  7. 将某字符串切割成阵列并排序列出
  8. Google Android操作系统内核编译图文教程
  9. 计算机两万字符英语文献翻译,求一篇2万字符以上的工程类外文文献及翻译
  10. 代码里经常看见idle,是什么意思
  11. 判断是否是完全二叉树和是否为满二叉树
  12. Prometheus和Grafana监控实践
  13. 知识分享之Golang——在Golang中unicode码和中文的互相转换函数
  14. dns和私人dns是什么意思?企业如何预防dns劫持?
  15. Mathematical notation
  16. 输入三个整数a,b,c。并进行两两相加,最后比较相加和的最大值。
  17. SAP UI5 应用开发教程之一百 - 如何修改 SAP UI5 框架的源代码实现,以及使用本地部署的 SAP UI5 SDK 试读版
  18. 外观html与外观css的区别,用房间和装修来解读html代码与css样式的区别和关系
  19. JavaScript中的表格:文本域
  20. 【图像处理】 均值滤波、中值滤波和高斯滤波

热门文章

  1. GO语言使用的几个注意点
  2. XenApp_XenDesktop_7.6实战篇之十四:XenDesktop虚拟桌面的交付
  3. CDH集群中YARN的参数配置
  4. Eclipse小技巧
  5. Linux下独立添加PHP扩展模块 mssql
  6. linux shell 删除文本 较长行
  7. java 反序列化漏洞 利用思路简介
  8. linux namespace 隔离内核资源的方式 简介
  9. linux libffi 简介 高级语言互调库
  10. linux shell 设置 标准 错误流 输出流 不显示