Mysql分区简介

什么是数据库分区?

按一定逻辑,把一张表在物理层面上分成更小的对象,这个过程对业务透明,在逻辑层面还是一张表.

分区有什么用?

  一是分区后能存储更多的数据,因为不同分区的数据能放到不同的磁盘上.二是分区后搜索更快,若搜索的数据都处在同一个或几个分区,则数据库只用在这一个或几个分区中进行搜索,大大提高搜索速度.三是删除数据更快,能按分区进行删除,比用delete效率更高.

注意事项

  如果数据表有主键,则分区键必须包含主键.这样做主要是为了避免主键无法按顺序存储,散落到不同的分区而降低搜索效率.如果一定要用其他字段作为分区键的话,那就是用联合主键.

分类

  1. RANGE分区

  Range分区根据分区键按一定范围进行分区,范围必须顺序排列,且不能重复,主要用于一些连续范围的数据.在Mysql5.1版本中只支持整数列分区.语法如下:

-> PARTITION BY RANGE (store_id) (

-> PARTITION p0 VALUES LESS THAN (10),

-> PARTITION p1 VALUES LESS THAN (20),

-> PARTITION p2 VALUES LESS THAN (30)
  1. LIST分区

  List分区即根据具体点的集合进行划分,必须包含列中出现的所有点,主要用于固定的点集数据. 在Mysql5.1版本中同样只支持整数列分区.语法如下:

-> )PARTITION BY LIST(category) (

-> PARTITION p0 VALUES IN (3, 5),

-> PARTITION p1 VALUES IN (1, 10),

-> PARTITION p2 VALUES IN (4, 9),

-> PARTITION p3 VALUES IN (2),
  1. Columns分区(Mysql5.5)

  与前面的range和list分区类似,主要扩充了支持类型,能支持整数,日期,字符等类型,还支持多列按元组的形式进行分区.具体语法如下:

-> PARTITION BY RANGE COLUMNS(a, b) (

-> PARTITION p01 VALUES LESS THAN (0,10),

-> PARTITION p02 VALUES LESS THAN (10,10),

-> PARTITION p03 VALUES LESS THAN (10,20),
  1. Hash分区

  Hash分区分为常规Hash和线性Hash分区.常规Hash通过取模运算来计算数据所处分区,这样做简洁易懂,但是在新增分区时原来所有的数据均需重新计算分区位置.线性Hash分区采用线性2的幂的形式,这样不以具体分区数来取模,而用固定2的幂个刻度来取模,在新增分区时原来的数据就无需重新计算分区位置,缺点是数据不会均匀分布,会有部分落到前几个分区.线性Hash计算分区步骤如下:

num=分区数

step1:V = POWER(2, CEILING(LOG(2, num)))

step2:N=values&(V-1);&位与运算(相当于取模)

step3:while N>=num

       step3-1:N = N & (CEIL(V / 2) – 1)

  1. KEY分区

  KEY分区类似hash分区,但是只能利用系统提供的hash函数,相比hash分区能支持更多的数据类型作为分区键.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值