msql分区

确认mysql服务器是否支持分区表: show plugins;

如果能看到partition则表示能分区。

 

HASH分区的特点:

  根据MOD(分区键,分区数)的值把数据行存储到表的不同分区中

  数据可以平均的分布在各个分区中

  HASH分区的键值必须是一个INT类型的值,或是通过函数可以转为INT类型

建立表时,下方添加:

  PARTITON BY HASH(ID)

  PARTIONS 4;

  PARTITON BY HASH(UNIX_TIMESTAMP(time))  # 转化为整型

  PARTIONS 4;  # 4个分区

 

RANGE分区特点:

  根据分区键值的范围把数据行存储到表的不同分区中

  多个分区的范围要连续,但是不能重叠

  默认情况下,使用VALUES LESS THAN属性,即每个分区不包括指定的那个值,如1-100,不包括100

建表时,下方添加:

  PARTITON BY RANGE (id)(

    PARTION p0 VALUES LESS THAN (10000),

    PARTION p1 VALUES LESS THAN (20000),

    PARTION p2 VALUES LESS THAN (30000),

    PARTION p3 VALUES LESS THAN MAXVALUE

   )

查询建立的分区:

  SELECT table_name,partition_name,partition_description,table_rows FROM information_schema.'PARTITIONS' WHERE table_name='表名';

增加分区:

  ALTER TABLE 表名 ADD PARTITON (PARTITION p4 VALUES LESS THAN(2018);

删除分区:

  ALTER TABLE 表名 DROP PARTITION p4;

数据归档迁移:需结构相同,归档到的表一定是非分区表,非临时表,没有外键约束,归档引擎archive

  ALTER TABLE 表名 exchange PARTITON p1 WITH TABLE 归档到的表;

  ALTER TABLE 归档到的表 ENGINE=ARCHIVE;  # 归档引擎的表只能进行查询操作不能写

RANGE分区使用场景:

  分区键为日期或是时间类型

  所有查询中都包括分区键

  定期按分区范围清理历史数据

 

 

LIST分区的特点:

  按分区键取值的列表进行分区

  同范围分区一样,各分区的列表值不能重复

  每一行数据必须能找到对应的分区列表,否则数据插入失败

建表时,下方添加:

  PARTITON BY LIST (id)(  # id 为13579,存到p0,2468存到p1

    PARTION p0 VALUES in (1,3,5,7,9),

    PARTION p1 VALUES in (2,4,6,8)

   )

 

 

使用分区表注意事项:

  结合业务场景选择分区键,避免夸分区查询;

  对分区表进行查询最好在WHERE从句中包含分区键;

  具有主键或唯一索引的表,主键或唯一索引必须是分区键的一部分

posted @ 2019-04-17 02:32  成杭君  阅读(234)  评论(0编辑  收藏  举报