zoukankan      html  css  js  c++  java
  • mysql之分区表

    1.分区表概述:

    1.分区表的主要意义在于,对于表结构进行划分,不同的数据进入不同的分区中,以便于在查询过程中,只查找指定分区的数据,减少数据库扫描的数据量。

    2.虽然从逻辑上看分区表是一张表,但是底层却是有不同的物理分区构成,对应的底层就是不同的数据文件。

    限制:唯一性索引,必须在分区列上.因为表在底层是分成的.每一段索引在每一段列上,不能跨分区进行唯一判断

     

    2.分区处理NULL值的方式:

    range分区表: null被保存在最小分区

    list分区: null被保存在0分区

    hashkey: 被当做0

    为了避免这种情况的产生,建议分区键设置成NOT NULL

    3.range分区

    range分区就是范围分区,根据被分区列的数据的范围,将数据路由到不同的分区中.

    range:

    优点:可以进行范围查询,并且筛选分区

    缺点:特定分区可能数据量很大,或者具有比较多的热数据,不能平均分散数据.

    关于范围分区,如果创建范围分区是为了解决单个文件的写压力问题,尽量不要使用递增的id作为分区列。

    range分区表语句:

    create table emp_range

    (empno varchar(20) not null,

    empname varchar(20),

    deptno int,

    birthdate date,

    salary int

    )

    partition by range(salary)

    (

    partition p1 values less than (1000),

    partition p2 values less than (2000),

    partition p3 values less than maxvalue

    );

    查看表文件结构:

    [root@master test1]# ls |grep emp

    emp_range.frm

    emp_range#P#p1.ibd

    emp_range#P#p2.ibd

    emp_range#P#p3.ibd

    4.list 列表分区:

    list就是列表分区,将固定的值,插入到固定的分区之中

    list分区表语句:

    create table emp_list

    (empno varchar(20) not null ,

    empname varchar(20),

    deptno int,

    birthdate date not null,

    salary int

    )

    partition by list(deptno)

    (

    partition p1 values in (1),

    partition p2 values in (2),

    partition p3 values in (3)

    );

    表文件结构:

    [root@master test1]# ls |grep list

    emp_list.frm

    emp_list#P#p1.ibd

    emp_list#P#p2.ibd

    emp_list#P#p3.ibd

    5.hash分区:

    先对列进行hash计算,然后使用取余算法对数据进行路由.

    Hash分区主要用来分散热点读,确保数据在预先确定个数的分区中尽可能平均分布。

    hash优点:可以打散热数据         缺点:不能进行范围查询

    hash分区语句:

    create table emp_hash

    (empno varchar(20) not null ,

    empname varchar(20),

    deptno int,

    birthdate date not null,

    salary int

    )

    partition by hash(year(birthdate))

    partitions 4;

    表文件结构:

    [root@master test1]# ls |grep hash

    emp_hash.frm

    emp_hash#P#p0.ibd

    emp_hash#P#p1.ibd

    emp_hash#P#p2.ibd

    emp_hash#P#p3.ibd

     

    6.key分区:

    hash分区只能支持数值的分区,key分区可以支持字符串分区

    key分区语句:

    create table emp_key

    (empno varchar(20) not null ,

    empname varchar(20),

    deptno int,

    birthdate date not null,

    salary int

    )

    partition by key(birthdate)

    partitions 4;

    表文件结构:

    [root@master test1]# ls |grep key

    emp_key.frm

    emp_key#P#p0.ibd

    emp_key#P#p1.ibd

    emp_key#P#p2.ibd

    emp_key#P#p3.ibd

    7.查看分区表:

    查看分区表的建表语句: show create table emp_list;
    查看分区使用情况:
    information_schema.partitions表中查询

    mysql> select partition_name,partition_expressio-n,partition_description, table_rows  from  INFORMATION_SCHEMA.partitions  where  table_schema='test1'   and table_name = 'emp_list';

    其中 table_schema为database,而table_name为分区表。expressio-n为敏感词(分开写了)

    +----------------+----------------------+-----------------------+------------+

    | partition_name | partition_expressio-n | partition_description | table_rows |

    +----------------+----------------------+-----------------------+------------+

    | p1             | deptno               | 1                     |          2 |

    | p2             | deptno               | 2                     |          2 |

    | p3             | deptno               | 3                     |          1 |

    +----------------+----------------------+-----------------------+------------+

    mysql> select count(1) from emp_list;

    +----------+

    | count(1) |

    +----------+

    |        5 |

    +----------+

    1 row in set (0.00 sec)

  • 相关阅读:
    css3-8 内外边距中的注意要点有哪些
    php实现 统计输入中各种字符的个数
    Java设计模式偷跑系列(十八)建模和责任链模式的实现
    Delphi 3D Glscene安装
    五通信算法:五种编码增益比较matlab模拟
    OpenGL于MFC使用汇总(三)——离屏渲染
    设计模式--模板方法 And State模式
    EXCEL 两人的建立Y轴
    LeetCode Median of Two Sorted Arrays
    wordpress常见的问题
  • 原文地址:https://www.cnblogs.com/lbg-database/p/10109928.html
Copyright © 2011-2022 走看看