【问题标题】:Import Very Huge CSV file into MySQL将非常巨大的 CSV 文件导入 MySQL
【发布时间】:2013-05-17 07:20:53
【问题描述】:

我有一个巨大的逗号分隔值 (CSV) 文件,我需要将其导入 mysql 数据库..

文件大小为 7 GB,我机器上的内存大小为 4.00 GB..

我尝试使用“LOAD DATA LOCAL INFILE”SQL 命令加载它,但是已经超过 12 个小时了,它还在运行!

我认为应该做的想法是:

  1. 创建一个程序,逐行读取文件并将它们逐行插入到数据库中。
  2. 将 CSV 文件拆分为多个其他较小的 CSV 文件(可能为 200 Mb),并使用“LOAD DATA LOCAL INFILE”将每个文件加载到数据库中

您认为将如此庞大的文件导入 MySQL 是否有更好、更有效的方法?

【问题讨论】:

  • @Sam 为什么他们会更快?
  • 你的意思是超过15小时是正常的吗?
  • 不,我想知道为什么 gui 客户端会让事情变得更快。我不知道需要多长时间。什么限制了速度?你是内存不足,还是在磁盘上等待?还是 100% cpu?你有在桌子上定义的任何键吗?架构是什么?你用的是什么操作系统?
  • 架构非常简单,它有 34 列,其中之一定义为主键。 CPU使用率并没有那么大,只有2-3%左右内存似乎也没有像我想象的那么大。这让我觉得“加载数据本地文件”只是卡住了什么都不做...在逐行插入时,我可以添加一个进度指示器,大致显示到目前为止插入的行数。 (PS:我只用了不到 30 分钟就将相同的数据插入到 SQLite 数据库中)
  • 删除密钥通常会使添加大量数据的速度更快。您是否首先在文件的简短版本上进行了尝试以确保它可以正常工作?时间如何随文件中的行数变化?

标签: mysql csv bigdata


【解决方案1】:

[所以你可以将 Q 标记为已关闭 - 我得到了一些分数!]

删除索引应该会有所帮助。

(虽然我很惊讶它有这么大的帮助。我猜 MySQL 无法将整个索引保存在内存中,这看起来很奇怪,因为它应该小于数据。)

【讨论】:

    猜你喜欢
    • 2015-09-08
    • 1970-01-01
    • 2020-07-09
    • 2016-01-06
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多