【发布时间】:2013-05-17 07:20:53
【问题描述】:
我有一个巨大的逗号分隔值 (CSV) 文件,我需要将其导入 mysql 数据库..
文件大小为 7 GB,我机器上的内存大小为 4.00 GB..
我尝试使用“LOAD DATA LOCAL INFILE”SQL 命令加载它,但是已经超过 12 个小时了,它还在运行!
我认为应该做的想法是:
- 创建一个程序,逐行读取文件并将它们逐行插入到数据库中。
- 将 CSV 文件拆分为多个其他较小的 CSV 文件(可能为 200 Mb),并使用“LOAD DATA LOCAL INFILE”将每个文件加载到数据库中
您认为将如此庞大的文件导入 MySQL 是否有更好、更有效的方法?
【问题讨论】:
-
@Sam 为什么他们会更快?
-
你的意思是超过15小时是正常的吗?
-
不,我想知道为什么 gui 客户端会让事情变得更快。我不知道需要多长时间。什么限制了速度?你是内存不足,还是在磁盘上等待?还是 100% cpu?你有在桌子上定义的任何键吗?架构是什么?你用的是什么操作系统?
-
架构非常简单,它有 34 列,其中之一定义为主键。 CPU使用率并没有那么大,只有2-3%左右内存似乎也没有像我想象的那么大。这让我觉得“加载数据本地文件”只是卡住了什么都不做...在逐行插入时,我可以添加一个进度指示器,大致显示到目前为止插入的行数。 (PS:我只用了不到 30 分钟就将相同的数据插入到 SQLite 数据库中)
-
删除密钥通常会使添加大量数据的速度更快。您是否首先在文件的简短版本上进行了尝试以确保它可以正常工作?时间如何随文件中的行数变化?