我有一个大约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,所以请在任何答案中记住这一点。
答案 0 :(得分:0)
我的问题结果是由于/ var / lib / mysql目录没有分配足够的空间。当处理加载数据命令时,当空间变低时,似乎mysql会减速而不是抛出错误。为了解决这个问题,我使用How to change MySQL data directory?
移动了数据库