Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Impor file CSV Besar ke MySQL

coba optimalkan skrip Anda terlebih dahulu. Pertama, jangan pernah menjalankan kueri tunggal saat mengimpor kecuali Anda tidak punya pilihan lain, overhead jaringan bisa menjadi pembunuh.

Coba sesuatu seperti (jelas belum diuji dan dikodekan dalam kotak teks SO, periksa tanda kurung yang cocok e.c.t.):

$url = 'http://www.example.com/directory/file.csv';
if (($handle = fopen($url, "r")) !== FALSE) 
{
fgetcsv($handle, 1000, ",");

$imports = array();

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
{
    $EvID = $data[0];
    $Ev = $data[1];
    $PerID = $data[2];
    $Per = $data[3];
    $VName = $data[4];
    $VID = $data[5];
    $VSA = $data[6];
    $DateTime = $data[7];
    $PCatID = $data[8];
    $PCat = $data[9];
    $CCatID = $data[10];
    $CCat = $data[11];
    $GCatID = $data[12];
    $GCat = $data[13];
    $City = $data[14];
    $State = $data[15];
    $StateID = $data[16];
    $Country = $data[17];
    $CountryID = $data[18];
    $Zip = $data[19];
    $TYN = $data[20];
    $IMAGEURL = $data[21];
    $URLLink = $data[22];

        $data[7] = strtotime($data[7]);
        $data[7] = date("Y-m-d H:i:s",$data[7]);

    if((($PCatID == '2') && (($CountryID == '217') or ($CountryID == '38'))) || (($GCatID == '16') or ($GCatID == '19') or ($GCatID == '30') or ($GCatID == '32'))) 
    {

    $imports[] = "('".md5($EventID.$PerformerID)."','".addslashes($data[0])."','".addslashes($data[1])."','".addslashes($data[2])."','".addslashes($data[3])."','".addslashes($data[4])."',
                    '".addslashes($data[5])."','".addslashes($data[6])."','".addslashes($data[7])."','".addslashes($data[8])."','".addslashes($data[9])."',
                '".addslashes($data[10])."','".addslashes($data[11])."','".addslashes($data[12])."','".addslashes($data[13])."','".addslashes($data[14])."',
                    '".addslashes($data[15])."','".addslashes($data[16])."','".addslashes($data[17])."','".addslashes($data[18])."','".addslashes($data[19])."',
                '".addslashes($data[20])."','".addslashes($data[21])."')";



    }
}

$importarrays = array_chunk($imports, 100);
foreach($importarrays as $arr) {

 if(!mysql_query("INSERT IGNORE INTO TNDB_CSV2 
                (id, EvID, Event, PerID, Per, VName,
                     VID, VSA, DateTime, PCatID, PCat,                
                CCatID, CCat, GCatID, GCat, City,
                     State, StateID, Country, CountryID, Zip,
                TYN, IMAGEURL) VALUES ".implode(',', $arr)){

     die("error: ".mysql_error());

 }

 }

fclose($handle);
}

Bermain-main dengan nomor dalam array_chunk, terlalu besar dan dapat menyebabkan masalah seperti kueri yang terlalu panjang (ya ada batas yang dapat dikonfigurasi di my.cnf), terlalu kecil dan overhead yang tidak perlu.

Anda juga dapat membatalkan penggunaan assign $data[x] ke variabel karena ini adalah pemborosan mengingat betapa kecilnya skrip, cukup gunakan $data[x] langsung di kueri Anda, dll. (tidak akan memberikan peningkatan besar-besaran, tetapi tergantung pada ukuran impor Anda, ini bisa menghemat sedikit).

Hal berikutnya adalah menggunakan sisipan/pembaruan prioritas rendah, lihat ini untuk info lebih lanjut tentang itu untuk memulai:Bagaimana cara memprioritaskan kueri tertentu?

setelah semua itu, Anda bisa memikirkan optimasi konfigurasi mysql, tapi itu yang harus dijelaskan oleh google karena pengaturan terbaik berbeda untuk setiap orang dan situasi unik mereka

Sunting: Hal lain yang telah saya lakukan sebelumnya adalah jika Anda memiliki banyak kunci yang diatur yang tidak diperlukan untuk impor, Anda dapat melepaskan kunci tersebut untuk sementara dan menambahkannya kembali ketika skrip selesai. Hal ini juga dapat menghasilkan peningkatan waktu yang baik, tetapi saat Anda mengerjakan database langsung, ada beberapa kesulitan yang harus diatasi jika Anda menempuh rute itu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Transaksi musim semi dan pengembalian di beberapa tabel

  2. Cadangkan database MySQL

  3. apa fungsi ip AWS lambda yang digunakan?

  4. Konversi Tabel Sensitif Huruf MySQL

  5. MySQL memilih baris teratas dengan nilai kondisi yang sama