mysql分区类型

mysql分区类型

MySQL5.7分区类型包括:

  • RANGE分区。这类分区基于某一列的值在给予的范围内,分配行到分区中。
  • LIST分区。类似于RANGE,除了这种分区选择的列值是基于一组不连续的值中的一个。(Similar to partitioning by RANGE, except that the partition is selected based on columns matching on of a set of discrete values.)
  • HASH分区。这种类型的分区,一个分区基于用户定义的表达式作用到被选择的列上。这个函数由MYSQL有效表达式组成,它产生一个非负整数。
  • KEY分区。这类分区类似于HASH分区,除了它是对一列或几列进行评估,并且是由MYSQL服务器提供它自己的哈希函数。而这些列可以包含除了整数之外的类型,因为这个由MYSQL提供的哈希函数可以根据任何数据类型都返回一个整数。

最常见的分区方法是根据日期。虽然MYSQL5.7并没有显示的支持以日期分区,但在MYSQL中实现基于DATE,TIME或DATETIME列的分区并不难。

当分区是基于key或linear key时,你可以使用DATE、TIME或DATATIME列做为分区列,而不需要对列上的值做任何修改。

在MYSQL5.7中,可以使用DATE或DATETIME列做为RANGE和LIST分区。MYSQL其它分区类型,无论如何都需要分区表达式产生一个整数值或NULL。如果希望使用RANGE、LIST、HASH或LINEAR HASH类型的分区在基于时间的列上,你可以简单的使用某一函数操作在DATE、TIME或DATETIME列上,并让其返回一个值,就像这样:

CREATE TABLE members (
    firstname VARCHAR(25) NOT NULL,
    lastname VARCHAR(25) NOT NULL,
    username VARCHAR(16) NOT NULL,
    email VARCHAR(35),
    joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
    PARTITION p0 VALUES LESS THAN (1960),
    PARTITION p1 VALUES LESS THAN (1970),
    PARTITION p2 VALUES LESS THAN (1980),
    PARTITION p3 VALUES LESS THAN (1990),
    PARTITION p4 VALUES LESS THAN MAXVALUE
);

MYSQL分区可以通过to days()、year()和to seconds()函数优化。当然也可以使用其它时间函数就返回一个整数或NULL,像weekday(), dayofyear()或month()。

有一点很重要——无论你使用什么类型的分区,分区的编号都是自动生成并顺序排列的,编号以0开始。当一个新行插入到被分区的表中,分区号用来正确指出要插到哪个分区中。

分区名是不区分大小写的。

当你为表指定分区号时,必须被表达成一个正数、非零整数、不以0开头,小数、分数是不被允许的。

发表评论