分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分,但是逻辑上仍是一个表。我们在此之前已经讲过MySQL分区表的原理,分区有利于管理非常大的表,它采用分而治之的逻辑,便于对数据的管理。本文我们就来进一步了解MySQL分区表,详细看一下MySQL分区表类型究竟有几个?

MySQL支持多种分区表,我们看到最多的是根据范围进行分区,每个分区存储落在某个范围的记录,分区表达式可以是列,也可以是包含列的表达式。分区的一个主要目的是将数据按照一个较粗的粒度分在不同的表中,这样做可以将相关数据存放在一起,另外,如果想一次批量删除整个分区的数据也会变的很方便。实现分区表的代码实际上是对一组底层表的句柄对象的封装。对分区表的请求,都会通过句柄对象转化成对存储引擎的接口调用。

MySQL支持如下几种类型的分区:

1.RANGE分区:行数据基于一个给定连续范围分区。不好理解,看例子吧。5.5版本开始支持RANGE COLUMNS分区。

2.LIST分区:同RANGE,区别在于给定的不是连续范围,是离散的值。5.5版本开始支持LIST COLUMNS分区。

3.HASH分区:根据用户自定义的表达式的返回值进行分区,返回值不能是负数。

4.KEY分区:根据MySQL内部提供的哈希函数进行分区。

5.COLUMNS分区:5.5版本开始支持,可以直接使用非整形的数据进行分区,分区根据类型直接比较而得,不需要转换为整形。

无论创建何种类型的分区,如果表中存在主键或唯一索引的列,则分区列必须是主键或唯一索引的一部分。索引列可以是null值。在没有主键和唯一索引的表中可以指定任意列为索引列。表中只能最多有一个唯一索引,即primary key 和unique key不能同时存在,primary key包含在unique key中时除外。

create table sales(

order_date datetime not null,

– other columns omitted

) engine=innodb partition by range(year(order_date)) (

partition p_2010 values less than (2010),partition p_2011 values less than (2011),partition p_2012 values less than (2012),partition p_catchall  values less than maxvalue);

partition分区子句中可以使用各种函数,但有一个要求,表达式返回的值要是一个确定的整数,且不能是一个常数。MySQL还支持键值,哈希和列表分区,这其中有些还支持子分区,不过我们在生产环境中很少见到。

我们还看到的一些其他的分区技术包括:

根据键值进行分区,来减少InnoDB的互斥竞争。

使用数据模函数来进行分区,然后将数据轮询放入不同的分区。

假设表有一个自增的主键列id,希望根据时间将最近的热点数据集中存放,那么必须将时间戳包含在主键当中才行,而这和主键本身的意义相矛盾,这种情况下可以使用这样的分区表达式来实现相同的目的:Hash(id div 100000) ,这将为100万数据简历一个分区,这样一方面实现了当初的分区目的,另一方面比起使用时间范围分区还避免了一个问题,就是当超过一定阀值时,如果使用时间范围分区就必须新增分区。

当然,分区技术的应用远不止与此,区分各种分区表的类型并加以利用,我们才能更好地使用MySQL数据库查询和利用各种各样的数据。

简述MySQL分区表类型相关推荐

  1. Mysql分区表概述、分区类型、分区管理

    另有一篇简单易懂的好文章帮助学习 Mysql分区表的原理和优缺点以及注意点 一.分区概述 分区是指根据一定的规则,数据库把一个表分解成多个更小的.更容易管理的部分.分区有利于管理非常大的表. MySQ ...

  2. mysql 分区表 归档_MySQL分区表

    1,MySQL分区表作用 当单表的数据量较大,需要进行定期的数据归档删除时,或者提高查询性能,都可以采用分区: 2,分区表设置 分区的种类 range分区 list分区 hash分区 key分区 ra ...

  3. 数据切分——Mysql分区表的管理与维护

    关于Mysql分区表的介绍可以参考: http://blog.csdn.net/jhq0113/article/details/44592865 关于Mysql分区表的创建可以参考: http://b ...

  4. mysql 字符串类型 分区_MySQL分区类型

    博文大纲: 1.RANGE分区 2.LIST分区 3.HASH分区 4.key分区 5.MySQL分表和分区的区别 6.附加:如何实现将分区放在不同的目录下进行存储 MySQL分区类型如下: RANF ...

  5. Mysql分区表的使用

    简单来说,分区表就是把物理表结构相同的几张表,通过一定算法,组成一张逻辑大表.这种算法叫"分区函数",当前 MySQL 数据库支持的分区函数类型有 RANGE.LIST.HASH. ...

  6. 数据切分——Mysql分区表的建立及性能分析

    Mysql的安装方法可以参考: http://blog.csdn.net/jhq0113/article/details/43812895 Mysql分区表的介绍可以参考: http://blog.c ...

  7. mysql表分区数量限制_详解MySQL分区表的局限和限制的代码实例

    本文对Mysql分区表的局限性做了一些总结,因为个人能力以及测试环境的 原因,有可能有错误的地方,还请大家看到能及时指出,当然有兴趣的朋友可以去官方网站查阅. 禁止构建 分区表达式不支持以下几种构建: ...

  8. 如何创建mysql分区表_mysql分区表创建思路

    mysql分区表有range,list,hash,key,其中每个分区又有特殊的类型.对于RANGE分区,有RANGE COLUMNS分区.对于LIST分区,有LIST COLUMNS分区.对于HAS ...

  9. mysql分区表truncate分区数据_详解MySQL分区表

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

最新文章

  1. 自己开发的MarkDown在线编辑器越来越完善了,心里感到高兴。
  2. sed线上经典案例之-同时替换多个字符串
  3. python做数据库管理系统_python+Django+mysql+bootstrap前端,数据库一次搞定)从头教你毕设实现一个简易好看的仓储物资管理之类系统...
  4. 函数dup和dup2
  5. Linux重器 vi编辑器
  6. mysql 产品表 myisam好还是innodb好_mysql两种表存储结构myisam和innodb的性能比较测试...
  7. Shell编程之通配符
  8. spring boot--拦截器实现
  9. 虚拟机常见的几种上网方式
  10. 中级计算机证书知识,计算机中级考哪些内容
  11. rgmii clock delay
  12. Ubuntu 下查看图片
  13. 供应链管理 | 华为是如何进行供应链规划与设计
  14. javax.el.PropertyNotFoundException: Property ‘XXX‘ not found on type xx.xx.xx.xx问题解决(el表达式))
  15. windows系统修复
  16. markdown插入图片的几个办法
  17. Python 判断三位水仙花数
  18. 【SpringMVC】拦截器和过滤器
  19. eclipse中启动tomcat报错:系统找不到指定路径
  20. 初学算法——第二天:斐波那契数列

热门文章

  1. Unity(设置鼠标指针贴图)
  2. 阿里巴巴年度技术总结 - 人工智能在搜索的应用和实践
  3. 平方根计算在加速度传感器中的应用
  4. oracle数据库12cocp培训教程,OCA/OCP认证考试指南全册(第3版) Oracle Database 12c 中文pdf扫描版[164MB]...
  5. 程序员如何提升自己的代码质量?
  6. web应用防火墙的部署方式
  7. 说说找工作这些事儿(未完)
  8. Launchy - 经典实用的免费键盘快速启动工具,桌面图标神马的最无爱了!
  9. Win10、Win7系统,电脑蓝屏,什么原因怎么解决?一篇文章彻底解决!
  10. Latex(1.1)——符号表