0

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);
}
4

1 に答える 1

3

私が試みるかもしれないものに基づいて:

  1. cmd行または「loaddatainfile」を介してcsvをテーブルに取得します
  2. 古いものと新しいものを結合する「挿入...選択」を使用して、レコードを一時テーブルに更新します
  3. 一時テーブルを元に戻します(削除/名前変更)

それはより速いだろうようです..少し厄介な場合。

于 2013-01-02T21:00:31.987 に答える