MySQL_分区

MySQL分区表

  • 几个分区对应几个.ibd和一个.frm的文件

    对于引擎层是4个表(4个分区)

    对于server是一个表

  • 分区表会影响gap lock 影响加锁范围,不同表锁不影响

  • MyiSAM是表级锁,分区对应的是多个表,表锁失效

  • 分区会先将所有分区访问一遍

  • 在server层认为是一张表,分区会共用一个MDL锁

  • 分区便于管理数据

分区类型

前提

  • 所有分区必须是一样的存储引擎
  • 不能使用主键、唯一键之外的键作为分区键,要么分区表主键、唯一键没有,要么必须包含

range分区

基于一个给定的连续区间的范围(区间要求连续并且不能重叠),把数据分配到不同的分区

给定一个连续区间的范围值进行分区,某个字段的值满足这个范围就会被分配到改分区,适用于字段的值是连续的区间的字段,如 日期范围,连续的数字

list分区

设置若干个固定值分区,如果某个字段的值在这个设置的值列表中就会被分配到该分区,适用于字段的值区分度不高的,或者值是有限的,特别是像枚举这样特点的列,list分区使用in标识一些固定的值的列表

Columns 分区

在mysql5.5之前range 和list 分区只支持整数分区,可以通过额外的函数运算或者额外的转换从而得到一个整数,columns分区分别为range columns list columns 两种,支持整数(tinyint到bigint,不支持decimal和float),日期(date\datetime),字符串(char\varchar\binary\varbinary)三大数据类型

Columns分区支持一个或者多个字段作为分区键,不支持表达式作为分区键,这点类似于range和list分区,需要注意的是range columns分区键的比较时基于元组的比较,也就是基于字段组的比较,这和range分区有差异

hash 分区

hash主要是用来分散热点读,确保数据在预先确定个数的分区中可能的平均分布,对一个表执行hash分区时,mysql会对分区键应用一个散列函数,以此确定数据应当放在N个分区中的哪个分区

Mysql支持两种hash分区:

常规hash分区和线性hash分区(linear hash分区),常规hash分区使用的算法是取余算法,对应一个表达式expr是可以计算出他被保存到哪个分区中,N = MOD(expr,num)

线性hash分区使用的是一个线性的2的幂运算法则

Key 分区

和hash 差不多 区别于必须使用mysql的hash函数,支持非整数字段分区

按照key进行分区非常类似于按照hash进行分区,只不过hash分区允许使用用户自定义的表达式,而key分区不允许使用用于自定义的表达式,需要使用mysql服务器提供的hash函数,同事hash值支持整数分区,二key分区支持使用出blob or text类型外的其他类型的列作为分区键

和hash功能一样,不同的是分区的字段可以是非int类型,如字符串、日期等类型。

子分区

子分区(subpartiton): 是对分区表中每个分区的再次分割,又被称为复合分区,支持对range和list进行子分区,子分区既可以使用hash分区又可以使用key分区.复合分区适用于保存非常大量的数据记录

分区优点

分区优点

1,分区可以分在多个磁盘,存储更大一点

2,根据查找条件,也就是where后面的条件,查找只查找相应的分区不用全部查找了

3,进行大数据搜索时可以进行并行处理。

4,跨多个磁盘来分散数据查询,来获得更大的查询吞吐量

发布了50 篇原创文章 · 获赞 32 · 访问量 5335

猜你喜欢

转载自blog.csdn.net/qq_39787367/article/details/103968190