• MySQL 表分区A


      在MySQL中表的分区类型总的来说有四种:

    第一种:range分区、基于一个给定的区间范围,把数据分配到不同的分区。

    第二种:list   分区、基本枚举的值列表进行分区。

    第三种:hast 分区、基于分区个数把数据分到不同的分区。

    第四种:key  分区、与hash分区差不多。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------

      第一种:range 分区、在MySQL 5.1中只支持int 类型的字段进行分区、5.5后增加了对datetime 与varchar 的支持 只是要把range 改成range columns 才可以

        例一:int 类的range分区 create table t3(x int, y int) partition by range (x) (partition p0 values less than(100),partition p1 values less than(200));

        例二:为表增加一个分区

        alter table t3 add partition (partition p2 values less than(maxvalue));

        例三:varchar or datetime 类型的分区

        create table t4(x varchar(32),y varchar(32)) partition by range columns (x) (partition p0 values less than('100'),partition p2 values less                       than(maxvalue));

      第二种:list 分区、在list 分区中不存在values less than(maxvalues) 这样的定义方式;也就是说插入的值如果列表中没有列出就会报错。

               list 也是支持 varchar 这样的数据类型的只是要加 columns 这个关键字

        例一:create table t5(x int,y int) partition by list (x) (partition p0 values in (1,3,5,7,9),partition p1 values in (2,4,6,8));

        例二:create table t6(x varchar(100),y varchar(100)) partition by list columns (x) (partition p0 values in ('a'),partition p1 values in ('b'));

      第三种:hash 分区、主要用来分散热点读,确保数据在各个分区中尽可能平均的分布。普通hash 用的是取模算法、打个比方如果分四个区、

        新插入的数据会到哪个分区当中去是根据分区键除四取模得到的。然而这个会带来问题,如我们把分区加到5的时候以前的老数据都会重新算

        一次才可以确定这行数据要存在哪个分区里。这会引起性能问题。

        create table t7(x int,y int) partition by hash (x) partitions 5;-- hash(expr) expr 如果为一个返回整数的表达式也是可以的。

      第四种:key 分区、和hash分区相差不大。它有两大优点一它支持text,blob 之外的所有数据类型、二它可以指定多个列。

        create table t8(x varchar(32),y varchar(32)) partition by key(x,y) partitions 4;

  • 相关阅读:
    API和String
    集合
    类和对象
    多态
    内部类
    继承
    抽象类
    常用API
    包和修饰符
    异常
  • 原文地址:https://www.cnblogs.com/JiangLe/p/4491362.html
Copyright © 2020-2023  润新知