【发布时间】:2015-10-02 10:52:36
【问题描述】:
我正在寻找有关是否有任何方法可以加快将大约 250 GB 数据从大约 8 个源 csv 文件导入 MySQL 表 (InnoDB) 的建议。每个 30 GB。 csv 本身没有重复项,但文件之间确实包含重复项——事实上,一些单独的记录出现在所有 8 个 csv 文件中。因此,需要在此过程中的某个时间点删除这些重复项。我目前的方法是使用主键创建一个空表,然后使用八个“LOAD DATA INFILE [...] IGNORE”语句依次加载每个 csv 文件,同时删除重复的条目。它适用于小样本文件。但是对于真实数据,第一个文件加载大约需要 1 小时,然后第二个需要 2 多个小时,第三个超过 5 个,第四个超过 9 小时,这就是我现在所处的位置。似乎随着表格的增长,将新数据与现有数据进行比较所需的时间也在增加……这当然是有道理的。但是还有四个文件要处理,如果我让它顺其自然,看起来可能还需要 4 或 5 天才能完成。
导入表上没有索引的所有内容,然后删除重复项会更好吗?或者我应该将 8 个 csv 中的每一个导入到单独的临时表中,然后进行联合查询以创建一个没有重复的新合并表?或者这些方法会花费同样长的时间吗?
【问题讨论】:
-
这里的无形资产太多了。在没有索引的情况下导入所有内容,然后在以后整理出重复项总体上比您现在所做的要快。您必须尝试通过中间表是否更快。
标签: mysql duplicates innodb load-data-infile