一、维护分区
对于表的维护,我们一般有如下几种方式: check table, optimize table, analyze table和repair table。
而这几种方式,对于分区同样适用。下面,我们一一阐述各种的作用。
1. rebuilding partitions
重建分区,它相当于先删除分区中的数据,然后重新插入。这个主要是用于分区的碎片整理。
譬如:
alter table t1 rebuild partition p0, p1;
2. optimizing partitions
该命令主要是用于回收空闲空间和分区的碎片整理。对分区执行该命令,相当于依次对分区执行 check partition, analyze partition,repair partition命令。
譬如:
alter table t1 optimize partition p0, p1;
注意:
一些存储引擎,譬如innodb,并不支持基于分区的optimizing。当你执行该命令时,会rebuild整张表,在 mysql 5.6.9版本以上,执行该命令会导致整张表被rebuild和analyze。在这种情况下,建议直接使用 alter table ... rebuild partition 或 alter table ... analyze partition。
3. analyzing partitions
读取和存储分区中值的分布情况
alter table t1 analyze partition p3;
4. repairing partitions
修复被破坏的分区
alter table t1 repair partition p0,p1;
5. checking partitions
检查分区是否存在错误
alter table trb3 check partition p1;
注意:
1> mysqlcheck和myisamchk并不支持分区表
2> 上述分区名也可用all替代,指的是对所有分区进行操作。
3> analyze, check, optimize, rebuild, repair和truncate命令并不适用于子分区。
二、如何获取分区的相关信息
1. 通过 show create table 语句来查看分区表的分区子句
譬如:
mysql> show create table e\g
*************************** 1. row ***************************
table: e
create table: create table `e` (
`id` int(11) not null,
`fname` varchar(30) default null,
`lname` varchar(30) default null
) engine=innodb default charset=latin1
/*!50100 partition by range (id)
(partition p0 values less than (50) engine = innodb,
partition p1 values less than (100) engine = innodb,
partition p2 values less than (150) engine = innodb,
partition p3 values less than maxvalue engine = innodb) */
1 row in set (0.00 sec)
2. 通过 show table status 语句来查看表是否分区
对应create_options字段,譬如:
mysql> show table status\g
*************************** 1. row ***************************
name: e
engine: innodb
version: 10
row_format: compact
rows: 6
avg_row_length: 10922
data_length: 65536
max_data_length: 0
index_length: 0
data_free: 0
auto_increment: null
create_time: 2015-12-07 22:26:06
update_time: null
check_time: null
collation: latin1_swedish_ci
checksum: null
create_options: partitioned
comment:
3. 查看 information_schema.partitions表
4. 通过 explain partitions select 语句查看对于具体的select语句,会访问哪个分区。
三、分区交换
分区交换的语法如下:
alter table pt exchange partition p with table nt
其中,pt是分区表,p是pt的分区(注:也可以是子分区),nt是目标表。
其实,分区交换的限制还是蛮多的:
1> nt不能为分区表
2> nt不能为临时表
3> nt和pt的结构必须一致
4> nt不存在任何外键约束,即既不能是主键,也不能是外键。
5> nt中的数据不能位于p分区的范围之外。