MySQL分区介绍

MySQL分区介绍   
  MySQL的分区技术不同与之前的分表技术,它与水平分表有点类似,但是它是在逻辑层进行的水平分表,对与应用程序而言它还是一张表。   
2.1 MySQL分区类型   
  MySQL5.1有5中分区类型:   
  RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区;   
  LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择;  
  HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。   
  KEY 分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。   
2.2 RANGE分区   
  对于RANGE分区,举个例子:   
  例1. 假定你创建了一个如下的一个表,该表保存有20家音像店的职员记录,这20家音像店的编号从1到20。 如果你想将其分成4个小分区,那么你可以采用RANGE分区,创建的数据库表如下:   

 这个例子,它的key是一个整型的数据,那是否对于其它类型的字段就无法作为key呢?  答案是否定的,例子2说明这种情况。   
  例2. 假定你创建了一个如下的一个表,该表保存有20家音像店的职员记录,这20家音像店的编号从1到20。你想把不同时期离职的员工进行分别存储,那么你可以将日期字段separated(即离职时间)作为一个key,创建的SQL语句如下:

这样你就可以对一个日期类型的字段调用mysql的日期函数YEAR()转换为一种整数类型,从而可以作为RANGE分区的key。这个时候,你可以看到,按照分区后的物理文件是相对独立的:  

可知,每个分区有自己独立的数据文件和索引文件,这是为什么你对某一个查询,它只会访问它需要访问的数据块,而不访问根本不是结果的物理块,从而可以大大提高系统的效率。

2.3 LIST分区  
  LIST分区与RANGE分区有类似的地方,举个与例1类似的例子如下:  
  例3. 假定你创建了一个如下的一个表,该表保存有20家音像店的职员记录,这20家音像店的编号从1到20。 而这20个音像店,分布在4个有经销权的地区,如下表所示:  
地区 商店ID 号  
北区 3, 5, 6, 9, 17  
东区 1, 2, 10, 11, 19, 20  
西区 4, 12, 13, 14, 18  
中心区 7, 8, 15, 16  
  那么你可以采用如下的LIST分区语句创建数据表:  

  同样,它在物理文件上也会标识不同的分区:  

2.4 HASH分区  
  HASH分区主要用来确保数据在预先确定数目的分区中平均分布。它可以基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。  
  例4. 假定你创建了一个如下的一个表,该表保存有20家音像店的职员记录,这20家音像店的编号从1到20。你想把不同时期加入的员工进行分别存储,那么你可以将日期字段hired(即离职时间)作为一个key,创建的SQL语句如下:

 那么要插入一个‘2005-09-15’入职的员工E1,那么按照取模函数会将其放置到第2分区中:  
  MOD(YEAR(‘2005-09-01’), 4)= MOD(2005,4)= 1 //即第2分区

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值