MySQL INSERT INTO SELECT 非常慢

标签 mysql select insert

我刚刚创建了一个空表document_test,它是document 表的副本。然后,我向 document_test 添加一个新的列主机,并复制 document 中的其他所有内容。声明如下:

INSERT INTO document_test (id,col1,col2,col3,col4) SELECT * from document;

document 表包含大约 550 万行,我已禁用 document_test 中的键,将 foreign_key_checks 设置为 0 和 unique_checks 为 0。此 INSERT 命令已在 Linux 服务器上运行了两天,尚未完成。 SHOW PROCESSLIST 显示状态为“正在发送数据”。 SELECT count(*) FROM document_test; 命令返回 0。但是,我确实从 SHOW TABLE STATUS 命令中看到 document_test 中的行数code> 不为零。有趣的是,据推测,行号应该单调增加,但事实并非如此。连续四次查询的结果分别是3299583、3325775、3299730和3341818!

这让我完全困惑。有人可以帮助我: (1)是否插入数据? (2)如何及时完成这个插入? (2) 有什么办法可以检查这个INSERT INTO SELECT命令的状态吗? (“发送数据”之后下一步是什么)

不幸的是,在运行此命令之前我没有打开慢查询日志和分析。

最佳答案

也许尝试使用mysqldump导出数据,然后通过LOAD DATA导入它?那应该更快。

关于MySQL INSERT INTO SELECT 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9366875/

相关文章:

ios - 核心数据中带有表别名的 SQL SELECT

javascript - 如何在不使用库的情况下在 JavaScript 中的另一个元素之后插入一个元素?

mysql - 使用 MySQL 触发器在同一表中更新行时插入新行

Mysql性能: A big query that always stuck/slow

mysql - 在 HQL 中减去子选择值

php - 错误:函数 Campaign::camp_detls() 的参数太少,0 恰好传递了 1 预期值

javascript - ng-options 中的键值对

ruby - 在另一个 block 中使用传递的 block

php - 使用 php 和 mysql 插入 html 表数据

php - Kohana3框架中表的列名作为变量