我想在mysql表中上传一个大的csv文件大约10,000,000条记录,其中也包含相同或更多的no。记录和一些重复记录。 我尝试了本地数据,但它也花费了更多时间。 如何在不等待很长时间的情况下解决这个问题。 如果无法解决,那么如何使用AJAX发送一些记录并一次处理它,直到整个csv上传/处理为止。
答案 0 :(得分:6)
LOAD DATA INFILE
不会被速度击败。您可以采取一些措施加快速度:
ALTER TABLE *foo* DISABLE KEYS
,但不幸的是,InnoDB不支持。你不得不放弃它们。如果问题在于它会破坏数据库性能,您可以将CSV文件拆分为多个CSV文件,然后将其加载到块中。
答案 1 :(得分:0)
试试这个:
load data local infile '/yourcsvfile.csv' into table yourtable fields terminated by ',' lines terminated by '\r\n'
答案 2 :(得分:0)
根据您的存储引擎,这可能需要很长时间。我注意到MYISAM的速度要快一些。我刚刚使用完全相同的数据集进行了测试,最后我使用了PostgreSQL,因为它在加载文件时更加强大。 Innodb非常慢,我在两个小时后使用相同大小的数据集中止了它,但是128列完整的数据是10,000,000条记录。
答案 3 :(得分:0)
由于这是一份每日更新的白名单,这并不意味着有大量重复(第一天之后)吗?如果是这种情况,它会使上传快得多,以便在插入之前检查记录是否已存在的简单脚本。
答案 4 :(得分:0)
尝试此查询:
$sql="LOAD DATA LOCAL INFILE '../upload/csvfile.csv'
INTO TABLE table_name FIELDS
TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n' "
答案 5 :(得分:0)
我意识到同样的问题,并找到出路。您可以使用AJAX检查上传大型CSV文件的过程。