mysql 自动分区详解
为什么要自动分区:因为在一张表里面的数据超过的百万条,查询速度很慢,所以增加自动分区功能,提高查询能力。
首先明确分区的几个步骤:
- 新建备份表
- 删除新表分区
- 交换分区
- 删除旧表分区
新增分区
具体实现方法如下
新建备份表:
set @back=concat('create table 新建schema名字.分区名字 like 表名');
PREPARE stmt1 FROM @back;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
删除新表分区
set @deleNewPartition=concat('alter table 新建schema名字.分区名字 REMOVE PARTITIONING');
PREPARE stmt1 FROM @deleNewPartition;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
交换分区表
set @exchangePartition=concat('alter table 表名 exchange partition ',旧表分区的名字,' with table 新建schema名字.创建分区名字);
PREPARE stmt2 FROM @exchangePartition;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
删除旧表分区
SET @v_delete=concat('alter table pack_data_info drop PARTITION '旧表分区的名称);
PREPARE stmt3 from @v_delete;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
新增分区
SET @v_add=concat('ALTER TABLE pack_data_info ADD PARTITION (PARTITION 上个分区的名字 VALUES LESS THAN (TO_DAYS(分区的时间))');
PREPARE stmt4 from @v_add;
EXECUTE stmt4;
DEALLOCATE PREPARE stmt4;
差看分区
SELECT partition_name,partition_expression,partition_description,table_rows
FROM information_schema.PARTITIONS
WHERE table_schema = SCHEMA() AND table_name='表名'
创建schema
create schema 名字
什么叫做schema:schema可以简单的理解为一个库,创建一个schema就是在创建一个数据库,我们将需要备份的数据放在这个schema库中。
请大家多多评论