mysql - 我需要分 2 批将 100 万条记录从一个表插入到另一个表中,在 MYSQL 中每个 500k
问题描述
嗨,任何人都可以帮助我在 MYSQL 中循环插入 7 年(每年百万条记录)的 700 万条记录,
我需要为每批插入 500,000 个。
数据在“Archive_data”表中,需要插入“Stg_table”
存档数据有年销售额,我想在 MYSQL 中写一个循环在 Year 上循环并插入一批 500K 每个
我试过了
insert into SDL_Stg_Bill_Details
select SDL_Id, Rec_Is_Processed, concat(Bill_Header_Key,'_',Row_Num), Bill_Header_Key,Row_Num from (
SELECT SDL_Id, Rec_Is_Processed, Bill_Details_Key, Bill_Header_Key,
ROW_NUMBER() OVER(partition by Bill_Header_Key order by SDL_Id ) Row_Num
FROM PANTALOONS_SOLUS_PROD.SDL_Stg_Bill_Details_Archive
where EXTRACT(YEAR_MONTH FROM Bill_Date) in ('201406',
'201407',
'201408',
'201409',
'201410') ff
如果我一次尝试 7 M 条记录,我会收到锁定等待超时错误
提前致谢
解决方案
不确定这是否是您想要的,但我希望通过一些调整它可以帮助您:
DELIMITER $
CREATE PROCEDURE CopyDataInBatch()
BEGIN
DECLARE x INT;
DECLARE y INT;
SET x = 1;
SET y = x + 10000;
the_loop : LOOP
IF x > 1000000 THEN /* Use the number of rows you wanted to copy*/
LEAVE the_loop;
END IF;
INSERT INTO table_in_which_copying (col_name_1, col_name_2)
SELECT (col_name_1, col_name_2) FROM table_from_which_copying
ORDER BY (col_name_1)
LIMIT x, y;
SET x = x + 10000;
SET y = y + 10000;
SELECT "Copied 10000 rows"; /* Only for testing... better remove it(?)*/
END LOOP;
END $
DELIMITER ;
推荐阅读
- javascript - 为什么 .Net.createConnection 在浏览器上不起作用以及如何解决这个问题?
- loops - 如何用ffmpeg循环一帧?所有其他框架都应该指向第一个没有变化,也许就像一个回避
- swift - wkwebview 覆盖和隐藏工具栏
- assembly - ASM85 与 ASM86 有何不同?
- node.js - npm run dev 没有运行脚本
- rust - 如果存在条目,您能否以一种为您提供密钥的拥有副本的方式插入 HashMap?
- cakephp - 为什么我的复选框的值在生产环境中总是保存为0?
- c++ - 从 C 和 C++ 中的父进程获取子进程列表(跨平台,无命令行)
- npm - 如何安全地删除 resolve-url?
- javascript - Firebase 实时效率问题:如何为聊天应用设置监听器