有效地将csv文件加载到mysql中

时间:2016-10-25 09:13:41

标签: mysql

我有一个大约20gig的csv文件,行大约60m,我想加载到mysql中的表中。

在开始任何加载之前,我已使用复合主键(col_a, col_b)在mysql中定义了我的表。

我已按照以下方式启动了我的负载:

LOAD DATA LOCAL INFILE '/mypath/mycsv.csv'
INTO TABLE mytable
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 0 LINES
(@v1v, @v2v, @v3v, @v4v, @v5v, etc...)
SET
col_a = nullif(@v1v,''), 
col_b = nullif(@v2v,''), 
col_c = nullif(@v3v,''), 
col_d = nullif(@v4v,''), 
col_e = nullif(@v5v,''), 
etc...,
load_dttm = NOW();

这似乎工作得很好,直到数据集大小达到10g左右,此时负载显着减慢,看起来可能需要一个小时的时间已经整夜运行并且没有变大。

是否有更有效的加载方式(取决于您对此词的定义)" large" csv进入了mysql。

我的直接想法是:

1)我应该删除复合主键,只在加载后应用它 2)我应该将csv分解为更小的块

据我所知,mysql主要受系统限制的限制,在我的情况下这应该不是问题 - 我使用的是Linux Red-hat服务器" MemTotal:396779348 kB"!和太字节的空间。

这是我第一次使用mysql,所以请在任何答案中记住这一点。

1 个答案:

答案 0 :(得分:0)

我的问题结果是由于/ var / lib / mysql目录没有分配足够的空间。当处理加载数据命令时,当空间变低时,似乎mysql会减速而不是抛出错误。为了解决这个问题,我使用How to change MySQL data directory?

移动了数据库