Cảm ơn bạn rất nhiều tadman và Hanlet Escaño và Uueerdo và Julie Pelletier và Solarflare vì đã giúp tôi trong các ý kiến.
Tôi đã thực hiện 3 thay đổi khác nhau trong mã PHP của mình bằng cách sử dụng các phương pháp tiếp cận mà bạn đề xuất trong các nhận xét, sau đó tôi đã kiểm tra kết quả và đây là kết quả kiểm tra.
Kết luận của 3 bài kiểm tra: như tadman đề xuất, khóa nằm trong TẢI THÔNG TIN DỮ LIỆU . nó đã giảm đáng kể thời gian thực thi xuống dưới 7 giây và đây là 3 bài kiểm tra.
MÃ GỐC: ~ 26 phút
THỬ NGHIỆM 1: ~ 34 phút
(as Uueerdo
đã đề xuất tôi xóa echo
câu lệnh và bộ đếm hàng từ vòng lặp)
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>";}
*/};
THỬ NGHIỆM 2: ~ 7 giây
(Như tadman cho biết tôi đã tìm kiếm TẢI THÔNG TIN DỮ LIỆU và nó cực kỳ mạnh mẽ
//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);
THỬ NGHIỆM 3: ~ 5 giây
Nó cũng giống như thử nghiệm 2 ngoại trừ việc tôi tìm thấy các mẹo hữu ích trên cùng một trang mà tadman đưa ra, giúp tối đa hóa tốc độ.
Tải dữ liệu hàng loạt cho Bảng 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);