当前位置: 首页 > news >正文

千万大表分区办法

 

第一步:创建影子表

CREATE TABLE xxx_record_new LIKE psb_opendoor_record;

第二步: 将影子表的分区字段-加入到主键中

ALTER TABLE xxx_record_new DROP PRIMARY KEY, ADD PRIMARY KEY (LockRecordMKId, OpenTime);

第三步: 给影子表创建分区

ALTER TABLE xxx_record_new
PARTITION BY RANGE (OpenTime) (PARTITION p202505 VALUES LESS THAN (20250601000000),PARTITION p202506 VALUES LESS THAN (20250701000000),PARTITION p202507 VALUES LESS THAN (20250801000000),PARTITION p202508 VALUES LESS THAN (20250901000000),PARTITION p202509 VALUES LESS THAN (20251001000000),PARTITION p202510 VALUES LESS THAN (20251101000000),PARTITION p202511 VALUES LESS THAN (20251201000000),PARTITION p202512 VALUES LESS THAN (20260101000000),PARTITION p202601 VALUES LESS THAN (20260201000000)
);

第四步:创建业务表触发器

DELIMITER $$CREATE TRIGGER trg_ins_fwd
AFTER INSERT ON xxx_record
FOR EACH ROW
BEGININSERT INTO xxx_record_new VALUES (NEW.LockRecordMKId, NEW.LockLogId, NEW.HotelId,NEW.RoomId, NEW.BillNo, NEW.CRowId, NEW.OpenTime, NEW.LockAddr,NEW.OpenState, NEW.RecordType, NEW.OpenType, NEW.Password,NEW.Telphone, NEW.PlatRole, NEW.ShopRole, NEW.CreateId,NEW.CreateDate, NEW.ModifyId, NEW.ModifyDate, NEW.Remark);
END$$DELIMITER ;

第五步:建立快照文件,加载快照数据

SHOW VARIABLES LIKE 'secure_file_priv';   //C:\ProgramData\MySQL\MySQL Server 8.4\Uploads\USE bscback;
SELECT *
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.4/Uploads/psb_old.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n'
FROM psb_opendoor_record
WHERE OpenTime < 20250801000000
ORDER BY LockRecordMKId;-- 批量导入影子表
SET autocommit = 0;
SET unique_checks = 0;
SET foreign_key_checks = 0;LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.4/Uploads/psb_old.csv'
INTO TABLE xxx_record_new
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;   -- 如果 CSV 带表头就加 IGNORE 1 LINES,不带就去掉COMMIT;
SET unique_checks = 1;
SET foreign_key_checks = 1;

第六步:核对-检测-切换

-- 1. 确认两边行数一致
SELECT COUNT(*) FROM xxx_record;      -- 原表(触发器仍在写)
SELECT COUNT(*) FROM xxx_record_new;  -- 影子表(已含旧数据 + 新数据)-- 2. 在一个事务里交换表名(InnoDB 毫秒级锁)
RENAME TABLE xxx_record      TO xxx_record_old,xxx_record_new  TO xxx_record;-- 3. 删除触发器(可选:留几天当保险)
DROP TRIGGER IF EXISTS trg_ins_fwd ON xxx_record_old;-- 4. 确认业务正常后,再 drop 旧表
-- DROP TABLE xxx_record_old;

相关测试脚本

--  清空测试表
TRUNCATE TABLE xxx_record_new;

 查询提交状态

SELECT @@autocommit;          -- 看是否 0
SELECT trx_id, trx_state FROM information_schema.innodb_trx\G

批量插入数据

DELIMITER $$ CREATE PROCEDURE insert_test_500() 
BEGIN DECLARE i INT DEFAULT 1; WHILE i<=500 DO 
INSERT INTO xxx_record VALUES(UUID(),CONCAT('LOG',LPAD(i,5,0)),'HT001',CONCAT('R',LPAD(i%100,3,0)),CONCAT('B',LPAD(i,6,0)),CONCAT('C',LPAD(i,6,0)),20250808125036,'ADDR01',0,4,2,'1234','13800000000',1,0,'admin',UNIX_TIMESTAMP()*1000,'admin',UNIX_TIMESTAMP()*1000,'测试');
SET i=i+1;
END WHILE;
END$$ DELIMITER ;--  执行存储过程
CALL insert_test_500();

 

http://www.sczhlp.com/news/9471/

相关文章:

  • 解决Spring Boot中的 java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver问题
  • AT ARC202D King
  • MySQL事务原理:从ACID到隔离级别的全解析
  • AI编程:代码多,效果好?
  • 为什么你应该学习编程 - 5大优势(附入门指南)
  • 基于AI的课程内容生成系统技术解析
  • ​鸿蒙APMS:开箱即用,崩溃卡顿耗电秒级捕捉
  • 美丽而脆弱的天体运动:当C#遇见宇宙混沌
  • day20
  • 题解:qoj9698 Twenty-two
  • 博文申明
  • 继电保护基本原理
  • 数据仓库命名规范 - 指南
  • 在AI技术快速落地的时代,挖掘新需求成为核心竞争力——某知名AI推理框架需求洞察
  • GraphRAG 入门教程:从原理到实战 - 指南
  • 使用spaCy检测编程语言的NLP技术解析
  • 必问10大问题
  • 读开源项目成功之道10领导者的过渡
  • 视觉7: 一口气了解相机/摄像头—马达
  • CMOS的基本名词概览
  • 从硅晶圆到芯片:CMOS工艺的全流程
  • 85页PPT,看懂芯片半导体的封装工艺
  • 40年后,Dijkstra算法极限再被突破,清华段然团队更快最短路径算法摘STOC最佳论文
  • 测试数据
  • 可定制NLP工具包spaCy与LLM集成技术解析
  • 什么是真正的Monorepo?深入解析单一代码仓库的利与弊
  • 40页PPT详解,先进封装键合设备
  • 英特尔裁员裁出个孤儿:Linux核心项目竟然没人管了
  • 第二十天
  • curl: (7) Failed to connect to 127.0.0.1 port 1087 after 6 ms: Couldnt connect to server