mysql--分区表

分区表:

        底层用多个物理子表组成。对于应用层来说可以不做变化,我们无需改变原有的SQL语句

        建表时使用PARTITION  BY定义每个分区存放的数据


适用场景:

        1.表很大无法全部放到内存中(查询的时候过滤掉一些分区,无需扫全表)
        2.更易于维护(删除的时候可以删除整个分区)
        3.分区表的数据可以分布在不同物理设备上,可以高效的利用多个硬件设备
        4.备份,恢复独立的分区。这在非常大的数据集的场景下效果非常好


原理:

        打开并锁住所有的底层表,优化器判断可过滤的分区,继而进行增删改查


分区表类型:

        PARTITION  BY  RANGE:根据范围分区,范围应该连续但是不重叠。 

        PARTITION  BY  LIST:基于枚举值分区

        PARTITION  BY  HASH:整数列对分区数取模

        PARTITION  BY  KEY:


使用策略:

        1. 全量扫描数据,不要任何索引(注意null值会到第一个分区中)
        2. 索引数据,并分离热点


分区的管理:

    删除分区:(如果删除了分区,那么分区下面的数据也会被删除)

        alter table 表名 drop partition 分区名

    新建分区:

        alter table 表名 add partition (partition 分区名字 values less than(某个具体值))

    修改现有表分区:

        alter table 表名

            PARTITION BY RANGE (字段)

            (PARTITION p0 VALUESLESS THAN (200000),

            PARTITION p1 VALUESLESS THAN (400000) ,

            PARTITION pmax VALUESLESS THAN MAXVALUE );


注意:

        1 只有在where条件中加入分区列才能起到作用,过滤掉不需要的分区:

        2 与普通搜索一样,在运算符左侧使用函数将使分区过滤失效,即使与分区函数相同也一样:


合并表(早期简单的分区实现):

        合并表相当于一个容器,里面包含了多个真实表。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,451评论 0 9
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,492评论 1 8
  • mysql分区 Mysql支持水平分区,并不支持垂直分区;水平分区:指将同一表中不同行的记录分配到不同的物理文件中...
    Gundy_阅读 948评论 0 2
  • 分区是指根据一定的规则,数据库把一个表分解成多个更小的,更容易管理的部分。就访问数据库的应用而言,逻辑上只有一个表...
    微日月阅读 1,520评论 0 7
  • ORA-13000: 维数超出范围 ORA-13001: 维数不匹配错误 ORA-13002: 指定的级别超出范围...
    thinkact阅读 19,484评论 1 5