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

bagaimana cara mengoptimalkan kode php penyisipan sql ini?

Terima kasih banyak tadman dan Hanlet Escaño dan Uueerdo dan Julie Pelletier dan Solarflare untuk membantu saya di komentar.

Saya melakukan 3 perubahan berbeda dalam kode PHP saya menggunakan pendekatan yang Anda sarankan di komentar, lalu saya menguji hasilnya dan inilah hasil pengujiannya.

Kesimpulan dari 3 pengujian: seperti yang disarankan tadman, kuncinya ada di LOAD DATA INFILE . itu secara dramatis mengurangi waktu eksekusi menjadi kurang dari 7 detik, dan ini adalah 3 tes.

KODE ASLI: ~ 26 menit

UJI 1 : ~ 34 menit

(sebagai Uueerdo menyarankan saya menghapus echo pernyataan dan penghitung baris dari loop)

while(!feof($filehandle)){
// $x++; // commented out
//echo $x . ":  "; // commented out
$fileline = fgets($filehandle);
$fields = explode("\t", $fileline);
$query = "INSERT INTO products(hs,arabicname,englishname) VALUES(" . "'" . str_replace("'", ".", $fields[0]) ."'," . "'". str_replace("'", ".", $fields[1]) . "'," . "'". str_replace("'", ".", $fields[2]) . "');"; 
$result = $conn->query($query); 
/* // commented out
if(!$result) {echo  $conn->error . "</br>";}
}else{echo $result . "</br>";}
*/};

UJI 2 : ~ 7 detik

(Sebagai tadman katanya saya mencari LOAD DATA INFILE dan itu sangat kuat

//replace the entire loop with this simple query
$query = "LOAD DATA LOCAL INFILE'" . 
addslashes("C:\\xampp\\htdocs\\bots\\impandexp\\imports.txt")
. "' INTO TABLE imports FIELDS TERMINATED BY '\t' LINES TERMINATED BY
'\r\n'(product_hs,counteryname,units,weight,value) SET  year = '2014';";
 $result = $conn->query($query);

UJI 3 : ~ 5 detik

Itu sama dengan tes 2 kecuali bahwa saya menemukan tips yang berguna pada halaman yang sama yang diberikan tadman, yang membantu dalam memaksimalkan kecepatan.

Pemuatan Data Massal untuk Tabel InnoDB

// turning off index checks that might slows down bulk data insertion
$query = "SET foreign_key_checks=0;";
$conn->query($query);
$query = "SET unique_checks=0;";
$conn->query($query);
$query ="SET autocommit=0;";
$conn->query($query);

$query = "LOAD DATA LOCAL INFILE'" . addslashes("C:\\xampp\\htdocs\\bots\\impandexp\\imports.txt") . "' INTO TABLE imports FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n'(product_hs,counteryname,units,weight,value) SET  year = '2014';";
$result = $conn->query($query);
echo $result . "</br>";
// turning them on again
$query = "SET foreign_key_checks=1;";
$conn->query($query);
$query = "SET unique_checks=1;";
$conn->query($query);
$query ="COMMIT;";
$conn->query($query);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memperbaiki kunci yang ditentukan terlalu panjang; panjang kunci maksimal adalah 1000 byte

  2. MySQL - Bagaimana cara memfilter dan menampilkan nilai maksimal dari grup?

  3. Gabung tabel dengan nilai koma

  4. NullPointerException - Masalah database terkunci saat mengambil data dari database dan menyimpan ke dalam array

  5. Cara memetakan tipe Enum di mybatis menggunakan typeHandler saat disisipkan