MySQL使用Java从文件插入大数据集


问题内容

我需要将CSV文件中的约180万行插入MySQL数据库。(只有一张桌子)

当前使用Java解析文件并插入每一行。

可以想象,这需要花费几个小时才能运行。(粗略地10)

我之所以没有将其从文件直接传送到db中,是因为在将数据添加到数据库之前必须对其进行操作。

此过程需要由那里的IT经理来运行。因此,我将其设置为一个不错的批处理文件,以便他们在将新的csv文件放入正确的位置后运行。因此,我需要通过将文件拖放到某个位置并运行批处理文件来使其工作正常。(Windows环境)

我的问题是,什么方法是插入这么多数据的最快方法?是从临时分析的文件中一次插入还是一次插入一个大插入?还有其他想法吗?

第二个问题是,如何优化我的MySQL安装以允许快速插入。(有时还会需要选择所有数据中的一个)

注意:该表最终将被删除,整个过程将在以后再次运行。

澄清一下:当前使用… opencsv.CSVReader解析文件,然后在每一行上进行插入。我在总结一些专栏,而忽略其他专栏。

更多说明:本地数据库MyISAM表


问题答案:

快速插入的提示:

  • 使用LOAD DATA INFILE语法让MySQL解析并插入它,即使您必须操纵它并在操作后将其送入。
  • 使用以下插入语法:

将值(val1,val2),(val3,val4),…插入表(col1,col2)

  • 插入之前,请删除所有键/索引。

  • 在您拥有的最快计算机上执行此操作(主要是在IO方面,但是RAM和CPU也很重要)。无论是数据库服务器,还是插入客户端,请记住,您将付出两倍的IO价格(一次读取,第二次插入)