gpt4 book ai didi

mysql - Innodb - 运行 INSERT INTO SELECT - 在整个事情完成之前记录不会显示吗?

转载 作者:行者123 更新时间:2023-11-30 23:30:00 24 4
gpt4 key购买 nike

我有一个包含 2600 万条记录的表,想向其中添加一些列,所以我用添加的列创建了一个新表,然后做了一个 INSERT INTO table_new SELECT (field1,field2) FROM table_old

有人告诉我这比尝试向现有表中添加列要快。

无论如何,对于 2600 万条记录,这花费了很长时间,并且使用 MySQL Workbench 监控进程,我看到进程仍在运行(40 小时并且还在增加)。

但是,当我执行 SELECT * FROM table_new 时,我还没有看到任何记录。使用 InnoDB,是否要等到整个事务完成后我才能在新表中看到 2600 万条记录中的任何一条?还是应该实时查看一条一条插入的记录?

我正在查看状态变量 Innodb_rows_inserted,昨天它一直在稳步上升,我认为应该代表我从 0 到 2600 万的进度,但现在它静止在 14-百万并且不再实时增加 :S,但我的 INSERT INTO SELECT 进程仍在运行。我担心出了什么问题。

我如何检查一切是否按预期工作?

最佳答案

如果您想跟踪大型提交的进度,在它运行时,您可以将 INSERT 作为过程运行。

这会增加一点开销,但您可以在每 x 条记录后添加一个提交点(例如,在下面的示例中,每 100 条记录后提交)

注意:本文是为 Oracle 编写的,因此您的理解可能会有所不同,但希望您能够根据自己的需要进行翻译。

declare
v_counter NUMBER := 0;
cursor c_table_old is
select *
from table_old;
begin

FOR l_table_old in c_table_old LOOP
insert into table_new (field1, field2)
values (l_table_old.field1,
l_table_old.field2);

v_counter := v_counter + 1;

IF (MOD(v_counter, 100) = 0) THEN
commit;
END IF;

END LOOP;

end;
/

关于mysql - Innodb - 运行 INSERT INTO SELECT - 在整个事情完成之前记录不会显示吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11227995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com