mysql表分区技术详细介绍

  

  1,概述
  ,,数据库单表到达一定量后,性能会有衰减,像mysql \ sql server等犹为明显,所以需要把这些数据进行分区处理。同时有时候可能出现数据剥离什么的,分区表就更有用处了!
  ,,MySQL 5.1中新增的分区(分区)功能就开始增加,优势也越来越明显了:
  ——与单个磁盘或文件系统分区相比,可以存储更多的数据
  ——很容易就能删除不用或者过时的数据
  ——一些查询可以得到极大的优化
  ——涉及到SUM ()/COUNT()等聚合函数时,可以并行进行
  - - - IO吞吐量更大
  ——分区允许可以设置为任意大小的规则,跨文件系统分配单个表的多个部分。实际上,表的不同部分在不同的位置被存储为单独的表。   

  

  2,分区技术支持
  ,,在5.6之前,使用这个参数查看当将配置是否支持分区
  mysql>显示变量如%分区%的;
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  | Variable_name ,,,,,,,,| |值
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  | have_partition_engine | YES ,|
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
  如果是是的表示你当前的配置支持分区
  ,,在5.6及以采用后,则采用如下方式进行查看
  mysql>显示插件;
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +
  | Name ,,,,,,,,,,,,,,,,,,,,,| Status ,| Type ,,,,,,,,,,,,,图书馆| |许可证|
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +
  | binlog ,,,,,,,,,,,,,,,,,,,| ACTIVE ,|存储ENGINE ,,,| NULL ,,| GPL ,,,|
  | mysql_native_password ,,,,| ACTIVE ,| AUTHENTICATION ,,,| NULL ,,| GPL ,,,|
  ..................................................................................
  | INNODB_LOCKS ,,,,,,,,,,,,,| ACTIVE ,| |信息模式NULL ,,| GPL ,,,|
  | INNODB_LOCK_WAITS ,,,,,,,,| ACTIVE ,| |信息模式NULL ,,| GPL ,,,|
  | partition ,,,,,,,,,,,,,,,,| ACTIVE ,|存储ENGINE ,,,| NULL ,,| GPL ,,,|
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - +
  42行集(0.00秒)
  最后一行,可以看到分区是活跃的,表示支持分区   

  

  3、分区类型及举例
  3.1范围分区
  范围分区:基于属于一个给定连续区间的列值,把多行分配给分区。如时间,连续的常量值等
  ——按年分区
  mysql>使用mytest;
  数据库修改
  mysql>创建表range_p (
  ,,→perid int (11),
  ,,→pername char(12)不是null,
  ,,→monsalary小数(10,2),
  ,,→credate datetime
  ,,→)范围分区(年(credate)) (
  ,,→分区p2011值小于(2011),
  ,,→分区p2012值小于(2012),
  ,,→分区p2013值小于(2013),
  ,,→分区p2014值小于(2014),
  ,,→分区p2015值小于maxvalue
  ,,→);
  查询好,0行影响(0.12秒)   

  

  3.2列举分区
  分列表区:类似于按范围分区,区别在分于列表区是基于列值匹配一个离散值集合中的某个值来进行选择。比如说类似性别(1、2)等属性值。
  mysql>创建表list_p (
  ,,→perid int (11),
  ,,→pername char(12)不是null,
  ,,→性int (1) not null,
  ,,→monsalary小数(10,2),
  ,,→credate datetime
  ,,→)分区的列表(性)(
  ,,→分区psex1值(1),
  ,,→分区psex2值(2));
  查询好,0行影响(0.06秒)   

  

  注意,列表只能是数字,使用字符会报错错误1697 (HY000):值值分区“psex1”一定是INT类型   

  

  3.3离散分区
  散列分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包在含MySQL中有效的,产生非负整数值的任何表达式。
  ——以int字段散列分区
  创建表hash_p (
  perid int (11),

mysql表分区技术详细介绍