2015-03-31 69 views
0

我很抱歉如果这个问题是重复的,但我发现的大多数都是关于InnoDB的,而且我正在使用MyISAM。LOAD INFILE 2亿加记录速度

我试图创建一个进程,将加载200-300万记录到表中的任何地方。我正在使用LOAD DATA INFILE,对于一个拥有1.78亿条记录的文件,大约需要30分钟来加载数据。任何人都可以提出任何方法来加速这个?或者这是相当期望的表现?我试过在加载之前关闭了密钥,但这似乎并没有真正创造任何明显的速度提升。我可以尝试其他什么设置?

我在一个有24个相当现代的核心的Linux服务器上。有什么方法可以利用这一事实?

我会补充一点,我试图加载3000万条记录,耗时5分钟,这似乎与1.78亿条记录的性能基本相同。但是,如果我尝试将3000万条记录加载到已有3000万条记录的表中,则时间需要8分钟。我可以做任何事情,因为我相信这种情况也会发生很多次。

任何帮助表示赞赏,但请知道,我相当数据库无知,所以示例或文档的链接将是非常有益的。

+0

看看这个博客的一些技巧:http://derwiki.tumblr.com/post/24490758395/loading-half-a-billion-rows-into-mysql首先,你应该做一些研究,但是,什么是瓶颈?磁盘?中央处理器?网络? – Wolph 2015-03-31 19:38:11

回答

1

这在某种程度上取决于给定记录的宽度,但听起来在30分钟内有1.78亿条记录对我来说已经是相当不错的速度了。我在25分钟内完成了4600万条记录,并且非常开心,但是在我的案例中,对于每条记录还有一些处理正在进行。

几乎总是有方法来提高性能,但成本效益有时会让人望而却步。如果您要获取的文件比每隔30分钟更频繁一次,那么很明显可能需要其他东西。但是,在这种情况下,我认为可能需要重新考虑更大的系统以及您存储的内容/为什么要存储它。

至于将3000万条记录加载到空表与非空表之间的差异,对于索引表而言,这并非意外。

+0

是的,我认为这可能是相当不错的表现,但只是想我会看看是否有办法让它更快。 – cardician 2015-03-31 19:47:51