我想在mysql表中上传一个大约10,000,000条大的csv文件,其中也包含相同或更多的no。记录以及一些重复记录。
我尝试了本地数据infile,但它也花费了更多时间。
我如何解决这个问题而无需等待很长时间。
如果无法解决,那么我该如何使用AJAX来发送一些记录并一次处理它,直到整个csv上载/处理完毕。

最佳答案

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

  • 删除或禁用某些索引(但是,当然,您将在加载后等待它们建立。但这通常更快。)如果您使用的是MyISAM,则可以ALTER TABLE *foo* DISABLE KEYS,但是不幸的是,InnoDB不支持。您必须删除它们。
  • 优化my.cnf设置。特别是,您可能可以禁用许多安全措施(例如fsync)。当然,如果您崩溃了,则必须还原备份并重新开始加载。另外,如果您运行的是默认的my.cnf,最后我检查了数据库机的最佳性能。周围有大量的调音指南。
  • 购买速度更快的硬件。或租用一些(例如,尝试使用快速的Amazon ECC实例)。
  • 如@ZendDevel所述,如果您没有锁定MySQL,请考虑其他数据存储解决方案。例如,如果您仅存储电话号码列表(以及其中的一些数据),则普通哈希表的速度将提高许多倍。

  • 如果问题在于它破坏了数据库性能,则可以将CSV文件拆分为多个CSV文件,然后分块加载它们。

    09-09 23:34
    查看更多