我使用以下语句将文件从一个数据库复制到另一个数据库:
INSERT INTO database1.table Select ... FROM database2.table
一切正常,但真的很慢。对于400,000个数据库(大约600mb),我花了几个小时。
我正在使用MyISAM表来执行此操作。
我的主键是一个唯一的标识符,它是由不同的数据域构建的。
我可以通过添加一个使用唯一标识符的新列来加速复制过程,假设一个整数从1开始并转到最后一行并使其成为AUTO_INCREMENT,复制文件时它也会上升吗? 或者可能在新列上设置索引?
如果你能帮助我加快复制过程,我真的很高兴。
答案 0 :(得分:1)
从一张桌子到另一张桌子的复制速度在很大程度上取决于很多东西,因此很难给出一个“这就是答案。”
这里有一些可能会出现问题的事情:
我使用的数据库包含数十亿行。当我不得不进行批量插入或批量复制时,索引是一个巨大的性能损失。你没有向我们展示表格的结构,但应该认真研究上面的#2。
答案 1 :(得分:0)
步骤1:如果可以,请停止使用糟糕的MyISAM引擎。读取速度非常快,但写入性能可能很残酷,并且通常整个表都会被锁定以保持一致性,因为不支持事务。 InnoDB可以更好地处理并发写入,并且具有记录的额外好处,因此如果您的服务器未正确关闭,您的表格不太可能完全被破坏。
步骤2:禁用目标表上的索引,或者在插入数据之前延迟创建索引。更新索引会增加大量开销。你这样做是一次性插入,因此惩罚较低,但仍然不为零。