如何更快地循环CSV mysql更新?

时间:2013-01-02 20:54:43

标签: php mysql database csv import

我有一个包含26,000行的csv文件,我循环遍历行并在包含250,000多条记录的表中更新记录(有时是多个)。此刻,它花了很多年!我想知道是否有另一种方法可以更快地完成这项工作(在代码或mysql / etc中)

$row = 1;
if (($handle = fopen("zip-codes-database-DELUXE-BUSINESS2.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            if($row> 1){


                # GET THE AREACODE FROM data 20

                # name is: 21

                $insert = "UPDATE ".TBLPREFIX."cities SET data = '".escape(serialize($data))."' WHERE area_code = ".$data[20]." AND title = '".trim(strtoupper($data[21]))."'";
                mysql_query($insert) or die(mysql_error());
            }
            $row++;
    }
    fclose($handle);
}

1 个答案:

答案 0 :(得分:3)

基于什么,我可能会尝试:

  1. 通过cmd行或'load data infile'
  2. 将csv放入表中
  3. 使用'insert ... select'将记录更新到临时表中,您可以在其中加入新旧
  4. 将临时表移回原始(删除/重命名)
  5. 好像它会更快..如果有点kludgy。