0

私は9個の欠落データを含むcsvファイルを持っています(csvファイルのサイズは229mbです)。csvファイルを小さく分割します。つまり、1つのcsvには4000または5000のデータが含まれています.csvファイルをアップロードし、そこからデータを読み取り、データベースに挿入します.まず、データをダミー テーブルに挿入して一覧表示します。次に、リストを送信してメイン テーブルに挿入します。しかし、1 時間以上かかります。私のコードは、

$path = "csv1.csv";
if (($handle = fopen("$path", "r")) !== FALSE) {
$cntcnt=1;
   while (($info = fgetcsv($handle, 10000, ",")) !== FALSE) {
      foreach($info as $key=>$value) {
      $datas[$key]=$value;
                             if(isset($datas[3]))       $bname      = $datas[3];        else $bname     = "";
                            if(isset($datas[4]))        $address    = $datas[4];        else $address       = "";
                            if(isset($datas[5]))        $city       = $datas[5];        else $city          = "";
                            if(isset($datas[7]))        $zipcode    = $datas[7];        else $zipcode       = "";
                            if(isset($datas[8]))        $cname      = $datas[8];        else $cname         = "";
                            if(isset($datas[13]))       $phone      = $datas[13];       else $phone             = "";
                            if(isset($datas[14]))       $fax        = $datas[14];       else $fax           = "";
                            if(isset($datas[15]))       $email      = $datas[15];       else $email         = "";
                            if(isset($datas[16]))       $website    = $datas[16];       else $website           = "";
                            $bname= mysql_real_escape_string($bname); 
                            $cname= mysql_real_escape_string($cname);
                            $address =mysql_real_escape_string($address);
                            $city =mysql_real_escape_string($city);
$data=array('vendorid'=>$vendorid,'cid'=>$cid,'scid'=>$scid,'sscid'=>$sscid,'rid'=>$rid,'pid'=>$pid,'rcid'=>$cityid,'lid'=>$lid,'bname'=>$bname,'address'=>$address,'street'=>$street,'zipcode'=>$zipcode,'phone'=>$phone,'cell'=>$cell,'fax'=>$fax,'email'=>$email,'website'=>$website,'description'=>$description,'mapaddress'=>$mapaddress,'price'=>$price,'date'=>$date,'ref_code'=>$ref_code,'realestate_category'=>$realestate_category,'template'=>$template,'busname'=>$busname,'code'=>$code,'b_type'=>$b_type,'edit_date'=>$edit_date,'phone2'=>$phone2,'cname'=>$cname,'ssscid'=>$ssscid);
$this->db->insert('c_tbldummy',$data);
        }
        }

このプロセスをスピードアップする方法はありますか?クライアントが 50000 から 75000 のデータをアップロードしたいので、だれか助けてください。

4

2 に答える 2

0

batch_insert を使用すると時間を短縮できます...

$this->db->insert_batch();

ここでは、各行のデータをテーブルに挿入しています...つまり、75000 +データがあるので..つまり、75000 +挿入クエリ..時間がかかっていると思います....これは著しくスピードアップしないかもしれませんが、私はこれにより、挿入にかかる時間が短縮されます。

バッチ挿入はクエリを 1 つに減らし、すべてのデータを 1 つのクエリに挿入します。

あなたはそれを試すことができます...

 while (($info = fgetcsv($handle, 10000, ",")) !== FALSE) {
  foreach($info as $key=>$value) {
  $datas[$key]=$value;
                         if(isset($datas[3]))       $bname      = $datas[3];        else $bname     = "";
                        if(isset($datas[4]))        $address    = $datas[4];        else $address       = "";
                        if(isset($datas[5]))        $city       = $datas[5];        else $city          = "";
                        if(isset($datas[7]))        $zipcode    = $datas[7];        else $zipcode       = "";
                        if(isset($datas[8]))        $cname      = $datas[8];        else $cname         = "";
                        if(isset($datas[13]))       $phone      = $datas[13];       else $phone             = "";
                        if(isset($datas[14]))       $fax        = $datas[14];       else $fax           = "";
                        if(isset($datas[15]))       $email      = $datas[15];       else $email         = "";
                        if(isset($datas[16]))       $website    = $datas[16];       else $website           = "";
                        $bname= mysql_real_escape_string($bname); 
                        $cname= mysql_real_escape_string($cname);
                        $address =mysql_real_escape_string($address);
                        $city =mysql_real_escape_string($city);
               $data[]=array('vendorid'=>$vendorid,'cid'=>$cid,'scid'=>$scid,'sscid'=>$sscid,'rid'=>$rid,'pid'=>$pid,'rcid'=>$cityid,'lid'=>$lid,'bname'=>$bname,'address'=>$address,'street'=>$street,'zipcode'=>$zipcode,'phone'=>$phone,'cell'=>$cell,'fax'=>$fax,'email'=>$email,'website'=>$website,'description'=>$description,'mapaddress'=>$mapaddress,'price'=>$price,'date'=>$date,'ref_code'=>$ref_code,'realestate_category'=>$realestate_category,'template'=>$template,'busname'=>$busname,'code'=>$code,'b_type'=>$b_type,'edit_date'=>$edit_date,'phone2'=>$phone2,'cname'=>$cname,'ssscid'=>$ssscid);

    }
    }

$this->db->insert_batch('c_tbldummy',$data);

insert_batch() のCI ドキュメント

于 2013-07-09T11:53:15.520 に答える