一.分区概念

mysql 5.1 以后支持分区, 有点类似MongoDB中的分片概念.
就是按照一定的规则, 将一个数据库表分解成很多细小的表, 这些细小的表可以是物理的分区, 就是在不同的位置. 但是站在应用的角度来看,分区又是透明的, 整体上看起来还是一个表,不影响使用.
 
二.分区优点
 1 可以存储更多的内容, 因为物理上可以放在不同的位置.
 2 提高查询效率, 如果分区的时候按照特定的规则, 将符合特定要求数据放在同一个分区内, 比如按照时间分区,查询的时候只要扫描某一个或几个分区即可.
 
三.分区键以及分区类型
  mysql的表要分区, 那么问题就来了, 到底按照什么分呢,怎么分呢?
     mysql分区有个分区键的概念, 根据分区键去分区的, 分区键要么是主键,或者唯一键, 要么这个表没有主键/ 唯一键.
     举个栗子:  如果你创建一张表, 想按照时间字段年或者月去分区的话,   这个表要么时间字段是主键, 要么没有主键.
 
  分区类型  
RANGE分区:范围分区, 基于一个给定的连续范围, 把数据分配到不同的分区, 如:时间范围, 或者id自增长的, 1-10万 ,10-20万条数据 
  LIST分区:     类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。 比如: 表内10条数据, id 1-10 , 将 id等于 1,3,5,7,9 放第一个分区, 2,4,6,8,10 放第二个分区 , 分区键等于特定的某个值
· HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。如: 将id为字符串类型的uuid 通过hash计算, 均匀的分配到 4个分区中
· KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
Columns分区:  mysql5.5以后引入的分区,主要解决5.5以前 分区键只能是整形的问题, columns 细分为list columns 和 Range columns 分区, 支持 整型,字符串和时间类型.
 
RANGE分区案例:
    按照日期的年分表, 通过Year函数获取分区键的具体年份, VALUES LESS  表示少于1991年的放入p0, 类推
     时间函数,TO_DAYS和  TO_SECONDS(我当前版本5.5支持) 可以让你更精确的分到天甚至秒.    
    PARTITION p3 VALUES LESS THAN MAXVALUE 是防止超过你设置的分区的话,都会存在最后一个分区内.
 
     CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1989-01-01',
    separated DATE NOT NULL DEFAULT '2016-12-14',
    job_code INT,
    store_id INT
 PARTITION BY RANGE (YEAR(separated)) (
    PARTITION p0 VALUES LESS THAN (1991),
    PARTITION p1 VALUES LESS THAN (1996),
    PARTITION p2 VALUES LESS THAN (2001),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);
RANGE分区应用
     特别适用于有分区条件的查询和统计, 可以非常有效的避免全表扫描. 比如要查询时间范围在1991 年以前的数据, 只会扫描p0 ,可以用mysql explain命令查看.
 
LIST分区 案例:
按照分类的具体id分区, 如果插入的数据, 超出以下这几个固定值, 则会报错.
mysql 5.5 以后支持 非整数分区了, 下边的分类id 就可以换成具体的分类字符串了
CREATE TABLE employees2 (
    id INT NOT NULL,
    category INT
)PARTITION BY LIST(category)(
    PARTITION p0 VALUES IN (3,5),
    PARTITION p1 VALUES IN (1,2),
    PARTITION p2 VALUES IN (4),
    PARTITION p3 VALUES IN (7,8)
);
HASH分区案例:
主要是针对分区键进行一个散列函数计算, 来确定数据到底放到哪个分区,hash分区主要分为两种, 一种是常规的hash分区, 算法就是取模运算, 另外一种就是线性2的幂的运算.
创建的语法上后者比前者多了一个LINEAR  比如:   PARTITION BY LINEAR    HASH(store_id) PARTITIONS 4;
 
两者的优缺点: 取模运算的hash分区,在进行分区管理, 比如curd分区的时候, 处理工作会非常的浩大, 归根就是取模算法的问题.
线程运算的hash就没这个问题, 但是相对于取模运算, 这个算法导致数据的存储不是很均匀
 
CREATE TABLE employees3 (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1989-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT,
    store_id INT
)
PARTITION BY HASH(store_id) PARTITIONS 4;
 
 
 
Key分区案例
跟范围分区很想, 区别是范围分区是通过一个表达式将分区键进行计算得到的一个具体的值来进行分区, 而key分区直接通过一个具体的值进行计算
CREATE TABLE tk (
    col1 INT NOT NULL,
    col2 CHAR(5),
    col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;

mysql分区/分片的更多相关文章

  1. MySQL分区技术 (一)

    4:MySQL 分区技术(是mysql 5.1以版本号后開始用->是甲骨文mysql技术团队维护人员以插件形式插入到mysql里面的技术) 眼下,针对海量数据的优化主要有2中方法: 1:大表拆成 ...

  2. Mysql分区、分表、分库

    1.MySQL分区 一般情况下我们创建的表对应一组存储文件,使用MyISAM存储引擎时是一个.MYI和.MYD文件,使用Innodb存储引擎时是一个.ibd和.frm(表结构)文件. 当数据量较大时( ...

  3. MySql分区、分表和分库

    MySql分区.分表和分库 数据库的数据量达到一定程度之后,为避免带来系统性能上的瓶颈.需要进行数据的处理,采用的手段是分区.分片.分库.分表. 一些问题的解释: 1.为什么要分表和分区? 日常开发中 ...

  4. Atitit 分区后的查询  mysql分区记录的流程与原理

    Atitit 分区后的查询  mysql分区记录的流程与原理 1.1.1. ibd是MySQL数据文件.索引文件1 1.2. 已经又数据了,如何分区? 给已有的表加上分区 ]1 1.3. 分成4个区, ...

  5. MySQL分区总结

    MySQL支持RANGE,LIST,HASH和KEY四种分区.其中,每个分区又都有一种特殊的类型.对于RANGE分区,有RANGE COLUMNS分区.对于LIST分区,有LIST COLUMNS分区 ...

  6. Mysql 分区处理NULL的得方式

    MySQL分区处理NULL值得方式 一般情况下,MySQL的分区把NULL当做零值,或者一个最小值进行处理 对于range分区 create table test_null( id int ) par ...

  7. mysql分区及实例演示

    一.为什么要分区? 需求:大数据.解决方案:分而治之,更细一点即为.将大表和大索引分为一个更小的操作单元 在mysql中,分区允许将表.索引和索引编排表细分为更小的单元.分区后,每个分区有自己单独的名 ...

  8. mysql分区

    <?php /* 分区 目录 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. ...

  9. MySQL Fabric 分片性能测试

    苦逼的人生,开始了新一轮调研.这次是上面要看 MySQL Fabric 分片性能,好吧,开搞. 1 啥是 MySQL Fabric 其实就是一个Python进程和应用端的Connector的组合.来一 ...

随机推荐

  1. SecureCRT使用总结

    设置背景和编码

  2. 【pyqtgraph绘图】线条,填充和颜色

    解读官方API-线条,填充和颜色 参考: http://www.pyqtgraph.org/documentation/style.html 线条,填充和颜色 Qt依靠其QColor,QPen和QBr ...

  3. DMA驱动框架

    框架入口源文件:dma.c (可根据入口源文件,再按着框架到内核走一遍) 内核版本:linux_2.6.22.6    硬件平台:JZ2440 以下是驱动框架: 以下是驱动代码  dma.c : #i ...

  4. Mybatis返回值类型是hashmap,输入键值对为空时,key 丢失的问题

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...

  5. 【托业】【新东方全真模拟】01~02-----P5~6

    12.precisely precise precision preciseness 114. 116. favorable adj.赞同的; 称赞的; 有利的; 讨人喜欢的; favor n.好感; ...

  6. VS Code Html Zen coding

    zen coding是一种编写html和css的方法, 很快捷. 打开Views/Home/About.cshtml, 然后在空白处输入div然后按Tab: 随后完整的div标签就出来了: zen c ...

  7. 2017-2018-2 20165236 实验三《Java面向对象程序设计》实验报告

    2017-2018-2 20165236 实验三<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计            班级:1652 姓名:郭金涛     ...

  8. abap 通过importing 和 exporting 调用其它函数

    1:其它函数的(输入或输出)参数名都在=号左边.

  9. [django]python异步神器-celery

    python异步神器celery https://segmentfault.com/a/1190000007780963

  10. SDN概述:简介、工具、环境部署

    一.前言: 本文初步接触 SDN 的相关概念.需要依次完成下面几项任务: SDN 简介 SDN 工具 SDN 环境部署 推荐阅读 推荐阅读下述内容: Ethane 项目,openflow 的基础 op ...