mysql : range分区、range和key复合分区、分区裁剪

本文介绍了一种使用MySQL分区管理大规模数据的方法,通过定期增加新的分区并删除旧分区来简化数据管理流程。文中提供了详细的SQL语句及存储过程,用于实现自动化分区管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--##test01大小为52G,保存大概两天的数据
--##每天数据大约25G左右,每天需创建一张备份表,插入新一天的数据,再要在这张表中删除前一天的数据
--##现在采取分区裁剪的办法,避免多余的备份与删除
--##现在分区分为两种:
--##1.简单range分区(一层分区,每个区大约25G)
--##2.range和key复合分区(两层分区,理想状态下均匀分布每个分区大概3G,但从实际历史表分区情况看,数据分布不均匀)
--##


--#########################################
--#############range分区###################
--1.停止应用服务器,杀死所有连接进程
--2.重命名大表
ALTER TABLE test01 RENAME TO risk_result_terminal_real20180620;
--3.创建分区表
 CREATE TABLE `test01` (
  `ResultID` VARCHAR(40) NOT NULL COMMENT '机场4字码',
  `NodeId` VARCHAR(40) NOT NULL COMMENT '终端风险因素ID',
  `RiskValue` DOUBLE(5,2) DEFAULT '1.00' COMMENT '终端风险因素值',
  `ComputeTime` DATETIME DEFAULT NULL COMMENT '计算时间',
  `Description` VARCHAR(500) DEFAULT NULL COMMENT '得分备注',
  `Sort` INT(11) DEFAULT NULL,
  `Dimension` VARCHAR(50) DEFAULT NULL COMMENT '评分维度',
  `ItemId` VARCHAR(40) DEFAULT NULL COMMENT '航班ID',
  KEY `r_resultid` (`ResultID`),
  KEY `r_itemId` (`ItemId`),
  KEY `r_risktime` (`ComputeTime`),
  KEY `r_NodeId` (`NodeId`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
/*!50500 PARTITION BY RANGE  COLUMNS(ComputeTime)
(PARTITION p20180621 VALUES LESS THAN ('2018-06-22') ENGINE = InnoDB,
 PARTITION p20180622 VALUES LESS THAN ('2018-06-23') ENGINE = InnoDB,
 PARTITION p20180623 VALUES LESS THAN ('2018-06-24') ENGINE = InnoDB,
 PARTITION p20180624 VALUES LESS THAN ('2018-06-25') ENGINE = InnoDB,
 PARTITION p20180625 VALUES LESS THAN ('2018-06-26') ENGINE = InnoDB,
 PARTITION p20180626 VALUES LESS THAN ('2018-06-27') ENGINE = InnoDB,
 PARTITION p20180627 VALUES LESS THAN ('2018-06-28') ENGINE = InnoDB) */
--#修改代码
--分区增加
ALTER TABLE test01 ADD PARTITION (PARTITION p20160524 VALUES LESS THAN ('2018-06-25'));
--分区裁剪
ALTER TABLE test01 DROP PARTITION p20180621;




--#创建存储过程,调用实现分区裁剪;
DELIMITER $$
USE `mrvc`$$
DROP PROCEDURE IF EXISTS `create_Partition`$$

CREATE DEFINER=`root`@`%` PROCEDURE `create_Partition`()
BEGIN
/* 事务回滚,其实放这里没什么作用,ALTER TABLE是隐式提交,回滚不了的。*/
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
START TRANSACTION;

/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值