我使用以下语句将文件从一个数据库复制到另一个数据库:
INSERT INTO database1.table Select ... FROM database2.table
一切正常,但速度真的很慢。对于 400.000 个数据行(大约 600mb),我花了几个小时。
我正在使用 MyISAM 表来执行此操作。
我的主键是由不同数据字段构建的唯一标识符。
我可以通过添加一个使用唯一标识符的新列来加速复制过程吗?假设一个从 1 开始到最后一行的整数,并使其成为 AUTO_INCREMENT,在复制文件时该列也会增加? 或者也许在新列上设置索引?
如果您能帮助我加快复制过程,我真的很高兴。
最佳答案
从一个表复制到另一个表的速度高度依赖于很多因素,因此很难给出一个单一的“这就是答案”。
我的脑海中浮现出一些可能存在问题的事情:
- 您似乎正在从一个数据库中的表复制到另一个数据库中的表。如果这两个数据库位于同一物理磁盘上,那么当磁盘查找、读取、查找、写入时,您将受到一些性能损失。
- 目标表有索引吗?如果是这样,MySQL 可能在数据插入的同时建立索引。这会大大减慢数据复制速度。禁用索引、复制数据,然后启用索引会快得多。
- MySQL 有很多用于缓存、内存管理等的调整参数。这些设置对于复制数据可能不是最佳的。我已经有一段时间没有使用 MySQL 了,但我记得有一个数据调优工具可以读取日志并告诉您性能影响来自何处。
我曾经使用过包含数十亿行的数据库。当我必须进行批量插入或批量复制时,索引会带来巨大的性能损失。您没有向我们展示表格的结构,但应该认真研究上面的#2。
关于MySQL从一个表到另一个表的慢速复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469360/