首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制大型MySQL表的最快方法?

复制大型MySQL表的最快方法?
EN

Stack Overflow用户
提问于 2013-05-23 14:20:38
回答 7查看 19.6K关注 0票数 8

从MySQL速度和内存使用的角度来看,复制大型表的最佳方法是什么?

选项1.使用从旧表中选择X行并将它们插入到新表中。继续进行select/insert的下一次迭代,直到复制所有条目。

选项2.使用没有行限制的MySQL INSERT INTO ... SELECT

选项3.使用MySQL INSERT INTO ... SELECT,每次运行时复制的行数量有限。

编辑:,我不会使用mysqldump。我的问题的目的是找到最好的方式来编写一个数据库转换程序。有些表变了,有些没有变。我需要自动完成整个复制/转换过程,而不必担心手动转储任何表。因此,如果您能够回答以上哪一个选项是最好的,这将是有帮助的。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-05-23 14:38:33

从上面列出的三个选项中删除。

如果在至少一个列上有一个唯一约束,我将选择第二个选项,因此如果在服务器超时时必须多次运行脚本以完成其任务,则不创建重复行。

否则,您的第三个选项将是方法,同时手动考虑任何服务器超时,以确定您的插入选择限制。

票数 2
EN

Stack Overflow用户

发布于 2013-05-23 14:22:23

有一个专门为这个任务编写的程序,名为米斯德

票数 10
EN

Stack Overflow用户

发布于 2019-03-14 13:18:16

mysqldump在简化和仔细处理所有类型的数据方面是一个很好的工具,但是它没有加载数据幼稚那么快。

如果您要在同一个数据库上进行复制,我喜欢选项2的这个版本:

( a)创建像foo这样的表foo_new;

( b)插入foo_new SELECT * foo;

我有很多有数亿行(比如1/2B)和InnoDB的表,还有几个键和约束。从一个MySQL转储读取数据需要很多小时,但是加载数据不成熟只需要一个小时左右。用DB脱机复制原始文件更快,这是正确的。同样正确的是,非ASCII字符、二进制数据和NULL需要在CSV (或制表符分隔的文件)中小心处理,但幸运的是,我已经得到了大量的数字和文本:-)。我可能会花时间看上面的步骤( a)和( b)所用的时间,但我认为它们比加载数据的速度要慢。这可能是因为交易。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16716427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档