我刚刚创建了一个空表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/