2013-01-02 58 views
0

我有一个csv文件,26,000行,我循环行和更新记录(有时多个)在一个表中有250,000 +记录。此刻,它的年龄!我在想,如果有办法做到这一点更快基于什么如何通过CSV循环更新mysql更新更快?

$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); 
} 
+0

你可以发布你的表结构,包括索引吗? – ESG

回答

3

的另一种方式(代码或MySQL的/ etc),我可能会尝试:

  1. 通过CMD线得到CSV到一个表或“LOAD DATA INFILE”
  2. 更新记录到使用临时表“插入...选择”在那里你加入新老
  3. 移动临时表返回到原来的(删除/重命名)

似乎它会更快..如果有点kludgy。