MySQL分区表

MySQL支持分区表,从而可以让表的内容分散存储在不同的物理存储位置。分区表的好处:

  •   表存储可以分布在多个设备上,这样可以通过I/O并行机制来缩短访问时间
  •   优化器可以把本地化搜索限定在听定的分区,或者并行搜索多个分区

创建分区表需要PARTITION BY子句(定义一个可以把行分配到各个分区的分区函数),以及其他一些与分区有关的选项。

分区函数可以根据范围、值列表或散列值来分配各行。

  •   根据范围来分区。使用该方式的情形是,行包含的是一些可划分为多个离散区间的值域,如日期、收入水平或重量
  •        根据列表来分区。该方式适用于每个分区都分别对应于某些明确的列表值,如邮政编码表,电话号码区号、按地理区域划分出的各实体的编号
  •        根据散列值来划分。该方式适用于根据从行键计算出的散列值,把行分不到各个分区。你可以自行提供一个散列函数;也可以告知MySQL要使用到的有哪些列,然后它会基于哪些列使用內建的散列函数计算散列值

分区函数必须具有确定性,这样,在分配行时,才会把相同的输入值分配到同一个分区。

CREATE TABLE log_partition(
    dt DATETIME NOT NULL,
    info VARCHAR(100) NOT NULL,
    INDEX(dt)
)
PARTITION BY RANGE(YEAR(dt))(
    PARTITION p0 VALUES LESS THAN (2010),
    PARTITION p1 VALUES LESS THAN (2011),
    PARTITION p2 VALUES LESS THAN (2012),
    PARTITION p3 VALUES LESS THAN (2013),
    PARTITION pmax VALUES LESS THAN MAXVALUE
);

若后续需要继续添加分区可以执行如下代码:

  

ALTER TABLE log_partition REORGANIZE PARTITION pmax INTO (
    PARTITION p4
    VALUES
        LESS THAN (2014),
        PARTITION pmax
    VALUES
        LESS THAN MAXVALUE
);

 

posted on 2018-06-20 07:30  知止而后有定  阅读(194)  评论(0)    收藏  举报

导航