时间:2021-07-01 10:21:17 帮助过:9人阅读
注意:
1. primary key和unique key必须包含在分区key的一部分,否则在创建primary key和unique index时会报”ERROR 1503 (HY000)“
mysql> create unique index idx_employees1_job_code on employees1(job_code);
ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table‘s partitioning function
或
mysql> ALTER TABLE `skate`.`employees1` ADD PRIMARY KEY (`id`) ;
ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table‘s partitioning function
2. 范围分区添加分区只能在最大值后面追加分区
3. 所有分区的engine必须一样
4. 范围分区分区字段:integer、数值表达式、日期列,日期函数表达式(如year(),to_days(),to_seconds(),unix_timestamp())
将旧的表数据导入到新表后,看到新表的数据都分布到不同的区了!
维护命令:
添加分区
Sql代码alter table xxxxxxx add partition (partition p0 values less than(1991)); //只能添加大于分区键的分区
删除分区
Sql代码alter table xxxxxxx drop partition p0; //可以删除任意分区
删除分区数据
alter table xxxxxx truncate partition p1,p2; alter table xxxxxx truncate partition all; 或 delete from xxxxxx where separated < ‘2006-01-01‘ or (separated >= ‘2006-01-01‘ and separated<‘2011-01-01‘);
重定义分区(包括重命名分区,伴随移动数据;合并分区)
alter table xxxxx reorganize partition p1,p3,p4 into (partition pm1 values less than(2006), partition pm2 values less than(2011));
rebuild重建分区
alter table xxxxxx rebuild partition pm1/all; //相当于drop所有记录,然后再reinsert;可以解决磁盘碎片
优化表
alter table tt2 optimize partition pm1; //在大量delete表数据后,可以回收空间和碎片整理。但在5.5.30后支持。在5.5.30之前可以通过recreate+analyze来替代,如果用rebuild+analyze速度慢
analzye表
alter table xxxxxx analyze partition pm1/all;
check表
alter table xxxxxx check partition pm1/all;
show create table employees2; //查看分区表的定义 show table status like ‘employees2‘\G; //查看表时候是分区表 如“Create_options: partitioned” select * from information_schema.KEY_COLUMN_USAGE where table_name=‘employees2‘; //查看索引 SELECT * FROM information_schema.partitions WHERE table_name=‘employees2‘ //查看分区表 explain partitions select * from employees2 where separated < ‘1990-01-01‘ or separated > ‘2016-01-01‘; //查看分区是否被select使用
//查看分区使用情况
select a.PARTITION_NAME part,a.PARTITION_EXPRESSION expr,a.PARTITION_DESCRIPTION descr,a.TABLE_ROWS
from information_schema.PARTITIONS a
where TABLE_SCHEMA=schema()
and table_name=‘rc3‘;
【转载】实战mysql分区(PARTITION)
标签:cond options pre sql script highlight 解决 sch mat