zoukankan      html  css  js  c++  java
  • mysql 5.7版本 最大分区数目_面对亿量级数据,除了分库分表,Mysql分区表你也应该了解一下...

    更多
    什么是分区表
    分区就是根据一定的规则,把一个表分解成多个更小的、更容易管理的部分,在逻辑上就只有一个表,但实际上这个表可能有N个物理分区对象组成,每个分区都是一个独立的对象,可以独立处理,可以作为表的一部分进行处理。

    小试牛刀
    看mysql是否支持分区
    #查看一下mysql版本

    mysql> select version();

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

    | version() |

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

    | 5.7.11-log |

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

    1 row in set (0.02 sec)

    #查看是否支持表分区


    出现partition的status为active说明mysql支持分区。

    2.创建一个分区表


    表创建成功后,我们会发现这个表(tb_partition_demo)包含了一个.frm文件和4个.ibd文件(每一个分区对应一个.ibd文件)也就是说:

    对于引擎层来说,这是4个表
    对于Server层来说,这是1个表
    所以分区对应用来说是完全透明的,我们就可以像使用普通表一样来使用分区表,不影响应用的业务逻辑。

    3.数据写入分区表


    上面写入的3条数据,”刘备“会被写入到partition_2018分区中,”关羽“会被写入到partition_2019分区中,”张飞“会被写入partition_2020分区中,可以通过下面的sql语句来验证一下:


    可以看出 partition_2018、partition_2019、partition_2020分区的确各有一条数据,而且对数据的更新和删除操作都和普通表使用方式一样,是不是很方便。

    下面我们来看看分区表和普通表的性能对比吧

    为了方便对比我们先创建一张和上面分区表一样的普通表,创建语句如下:


    我们分别先往tb_normal_demo和tb_partition_demo表中增加200W条数据后(写入数据的程序就不在这里展示了),再分别执行以下sql

    #查询普通表

    mysql> select count(1) from tb_normal_demo where create_time between '2019-01-01' and '2019-12-31';

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

    | count(1) |

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

    | 744352 |

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

    1 row in set (2.12 sec)

    #查询分区表

    mysql> select count(1) from tb_normal_demo where create_time between '2019-01-01' and '2019-12-31';

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

    | count(1) |

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

    | 744352 |

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

    1 row in set (0.22 sec)

    可见根据分区字段查询表数据时,分区表的优势一下就体现出来了。

    当然以上用了Range分区类型,其实Mysql来有很多种分区类型如:

    Range分区
    List分区
    Columns分区
    Hash分区
    Key分区
    子分区
    用法都差不多,这里就不在过多描述。

    使用分区表的优势

    分区表最大优势就是对业务透明,相对于分区表来说,使用分区表的业务代码更简洁,还有分区表可以很方便的清理历史数据(只需要drop掉某个历史分区就可以了,语法为:alter table t drop partition ....)使用分区表时要注意:

    分区并不是越细越好,实际上,单表或者单分区的数据1000W行,只要没有特别大的索引,对于现在的硬件能力来说都已经是小表了。
    分区也不要提前预留太多,在使用之前预先创建即可,又如按月分区,每年年底再把下一年的12个分区创建上即可,对于没有数据的历史分区,要及时drop掉。
    查询数据尽量不要跨很多分区取数据,这样可能导致查询会很慢,所以使用分区前要提前做好充分的考虑。

    使用分区表的劣势

    Mysql在第一次打开分区表的时候,需要访问所有的分区(打开的文件较多)
    在Server层,Mysql认为这是同一张表,因此所有分区共同使用一个MDL锁(锁的粒度大),影响并发。

    ————————————————
    版权声明:本文为CSDN博主「Stone Chan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_35782626/article/details/113088299

  • 相关阅读:
    df、du、fdisk 规格严格
    云计算 规格严格
    RARLinux 规格严格
    CentOS 规格严格
    NetBeans 时事通讯(刊号 # 22 Aug 18, 2008)
    Single SignOn Integrating Liferay With CAS Server
    Single SignOn Integrating Liferay With CAS Server
    Liferay SSO CAS 集成
    NetBeans 时事通讯(刊号 # 21 Aug 13, 2008 )
    Liferay SSO CAS 集成
  • 原文地址:https://www.cnblogs.com/javalinux/p/14984618.html
Copyright © 2011-2022 走看看