MySQL怎么设置分区 mysql 分区语句( 五 )


3.1:线性HASH分区
线性HASH分区在“PARTITION BY”子句中添加“LINEAR”关键字 。
线性HASH分区的有点在于增加、删除、合并和拆分分区将变得更加快捷,有利于处理含有及其大量数据的表 。它的缺点在于各个分区间数据的分布不大可能均衡 。
4. KEY分区
类似于HASH分区,HASH分区允许用户自定义的表达式,而KEY分区则不允许使用用户自定义的表达式;HASH分区只支持整数分区,KEY分区支持除了blob和text类型之外的其他数据类型分区 。
与HASH分区不同,创建KEY分区表的时候,可以不指定分区键 , 默认会选择使用主键或唯一键作为分区键,没有主键或唯一键,就必须指定分区键 。
CREATE TABLE tbl_test (
uuid INT NOT NULL,
title VARCHAR(20)
))
PARTITION BY LINEAR Key (uuid)
PARTITIONS 3;
解读:根据分区键来进行分区
5. 子分区
子分区是分区表中,每个分区的再次分割 , 适合保存非常大量的数据 。
CREATE TABLE tbl_test (
registerTime Date
))
PARTITION BY GANGE(YEAR(registerTime))
SUBPARTITION BY HASH (TO_DAYS(registerTime))
SUBPARTITIONS 2
(
PARTITION p0 VALUES LESS THAN (2017),
PARTITION p1 VALUES LESS THAN (2020),
PARTITION p2 VALUES LESS THAN MAXVALUE
);
解读:主分区使用RANGE按照年来进行分区,有3个RANGE分区 。这3个分区中又被进一步分成了2个子分区,实际上,整个表被分成了3 * 2 = 6个分区 。每个子分区按照天进行HASH分区 。小于2017的放在一起 , 2017-2020的放在一起,大于2020的放在一起 。
注意:
(1) 在MySQL5.1中,对于已经通过RANGE或LIST分区了的表在进行子分区是可能的 。子分区既可以使用HASH分区,也可以使用KEY分区 。这也被称为复合分区 。
(2) 每个分区必须有相同数量的子分区 。
(3) 如果在一个分区表上的任何分区上使用SUBPARTITION来明确定义任何子分区 , 那么就必须定义所有的子分区 。
(4) 每个SUBPARTITION子句必须包含(至少)子分区的一个名字 。
(5) 在每个子分区内,子分区的名字必须是惟一的,目前在整个表中,也要保持唯一 。例如:
PARTITION BY RANGE(YEAR(registerTime))
SUBPARTITION BY HASH(TO_DAYS(registerTime))
(
PARTITION p0 VALUES LESS THAN (2017) (
SUBPARTITION s0,
SUBPARTITION s1
),
PARTITION p1 VALUES LESS THAN (2020) (
SUBPARTITION s2,
SUBPARTITION s3
),
PARTITION p2 VALUES LESS THAN MAXVALUE (
SUBPARTITION s4,
SUBPARTITION s5
)
)
子分区可以用于特别大的表 , 可以在多个磁盘间分配数据和索引 。例如:
SUBPARTITION s0
DATA DIRECTORY = '/disk0/data'
INDEX DIRECTORY = '/disk0/idx'
,
,
SUBPARTITION s1
DATA DIRECTORY = '/disk1/data'
INDEX DIRECTORY = '/disk1/idx'
九、MySQL分区处理NULL值的方式
MySQL中的分区禁止空值NULL上没有进行处理,无论它是一个列值还是一个用户定义表达式的值,一般而言,在这种情况下MySQL把NULL视为0 。如果你希望回避这种做法,你应该在设计表时声明列“NOT NULL” 。
十、分区管理概述
可以对分区进行添加、删除、重新定义、合并或拆分等管理操作 。
① RANGE和LIST分区的管理
1. 删除分区语句如:alter table tbl_test drop partition p0;
注意:
(1) 当删除了一个分区 , 也同时删除了该分区中所有的数据 。
(2) 可以通过show create table tbl_test;来查看新的创建表的语句 。
(3) 如果是LIST分区的话,删除的数据不能新增进来,因为这些行的列值包含在已经删除了的分区的值列表中 。

推荐阅读