MySQL是否支持分区这个问题
我们需要根据MySQL版本来说,MySQL5.1之前不支持分区,5.1版本开始支持的,对于innodb,mylsam,ndb存储引擎都是支持的,csv等存储引擎不支持;
分区的过程是将一个表或索引分解为多个更小、更可管理的但是在物理上这个表或索引可能由数
分区的分类
垂直分区
指将同一表中不同列的记录分配到不同的物理文件中
水平分区
指将同一表中不同行的记录分配到不同的物理文件中
MySQL中使用的分区类型
MySQL数据库支持的分区类型为水平分区,并不支持垂直分区。此外,
了数据又存放了索引。而全局分区是指,数据存放在各个分区中,但是所有数据的
索引放在一个对象中。目前,MySQL数据库还不支持全局分区
InnoDB存储引擎的表
分区类型
RANGE分区:
是最常用的一种分区类型。
CREATE TABLE t
id INT
)ENGINE=INNDB
PARTITION BY RANGE(id)(
PARTITION pO VALUES LESS THAN(10)
PARTITION p1 VALUES LESS THAN(20));
注:20条数据10条作为一个区
LIST分区:
LIST分区和RANGE分区非常相似,只是分区列的值是离散的,而非连续的。(使用较少)
PARTITJON D0 VALUES IN(1,3.5.7.9)
PARTIT]ON p1 VALUES IN(0,2,4,6,8)
奇数和偶数离散分区
HASH公区
HASH公区是将数据均勾地公布到额先定义的多个公反中保证各分区的数据数量大致都是一样的。在RANGE和LIST分区中,必须明确指定一个给定的列值或列值集合应该保存在哪个分区中:用户所要做的只是基于将要进行哈希分区的列值指定一个
列值或表达式,以及指定被分区的表将要被分割成的分区数量。(使用较少
CREATE TABLEthasht
a INT,
b DATETIME
)ENGINE-InnoDB
PARTTION BY HASH(EAR(b))
KEY分区。
KEY分区和HASH分区相似,不同之处在于HASH分区使用用户楚义的函数进行分区,KEY分区使用MySQL数据库提供的函数进行分区。(使用较少)
.> PARTITION BY KEY(b)
-> PARTITIONS 4;
总结:
在前面介绍的RANGE、LIST、HASH和KEY这四种分区中,分区的条件是:数据必须是整型(interger),种进化。COLUMNS分区可
以直接使用非整型的数据进行分区,分区根据类型直接比较而得,不需要转化为整型。(常见使用,包括orcale )
CREATE TABLE t_columns_range(
aINT,
b DATETIME
)ENGINE=INNODB
PARTITION BY RANGE COLUMNS(B)(
PARTITION pO VALUES LESS THAN(2009-01-01’),
PARTITION p1 VALUES LESS THAN('2010-01-01")
);
子分区
子分区(subpartitioning)是在分区的基础上再进行分区,有时也称这种分区为复合分区(compositepartitioning)。MySQL数据库允许在RANGE和LIST的分区上再进行HASH或KEY的子分区,如:
SUBPARTITIONS 2(
-> PARTITION PO VALUES LESS THAN(1990),
-> PARTITION p1 VALUES LESS THAN(2000),PARTITION p2 VALUES LESS THAN MAXVALUE
->);
InnoDB存储引擎分区中的NULL值
MvSQL数据库允许对NULL值做分区,但是处理的方法与其他数据库可能完全不同。MYSQL数据库的分区这和MySQL数据库中处理NULL值的ORDER BY操作是一样
的。因此对于不同的分区类型,MvSQL数据库对于NULL值的处理也是各不相同。
对于RANGE分区,如果向分区列插入了NULL值,则MySQL数据库会将该值放入最左边的分区。HASH和KEY分区对于NULL的处理方式和RANGE分区、LIST分区不一样。任何分区函数都会将含有NULL值的记录返回为0。