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