在mysql表中上传大型CSV文件大约10,000,000条记录,它也包含重复的行

aka*_*eep 5 javascript php mysql ajax

我想在mysql表中上传一个大的csv文件大约10,000,000条记录,其中也包含相同或更多的no.记录和一些重复记录.我尝试了本地数据,但它也花费了更多时间.如何在不等待很长时间的情况下解决这个问题.如果它无法解决,那么我怎样才能用AJAX发送一些记录并一次处理它,直到整个csv上传/ proccessed为止.

der*_*ert 6

LOAD DATA INFILE不会被速度击败.您可以采取一些措施加快速度:

  • 删除或禁用某些索引(但当然,您将在加载后等待它们构建.但这通常更快).如果你正在使用MyISAM,你可以ALTER TABLE *foo* DISABLE KEYS,但不幸的是InnoDB不支持.你必须放弃它们.
  • 优化您的my.cnf设置.特别是,您可以禁用许多安全措施(如fsync).当然,如果你遇到崩溃,你将不得不恢复备份并重新开始加载.另外,如果您正在运行默认的my.cnf,那么最后我检查了它对于数据库机器来说非常不理想.周围有很多调音指南.
  • 购买更快的硬件.或租一些(例如,尝试快速的亚马逊ECC实例).
  • 正如@ZendDevel所提到的,如果你没有锁定MySQL,请考虑其他数据存储解决方案.例如,如果您只是存储电话号码列表(以及一些数据),那么普通哈希表的速度会快很多倍.

如果问题在于它会破坏数据库性能,则可以将CSV文件拆分为多个CSV文件,然后将其加载到块中.


小智 0

尝试这个:

load data local infile '/yourcsvfile.csv' into table yourtable fields terminated by ',' lines terminated by '\r\n'
Run Code Online (Sandbox Code Playgroud)