hãy thử tối ưu hóa các tập lệnh của bạn trước. Trước hết, đừng bao giờ chạy các truy vấn đơn lẻ khi nhập trừ khi bạn không có lựa chọn nào khác, chi phí mạng có thể là một kẻ giết người.
Hãy thử một cái gì đó như (rõ ràng là chưa được kiểm tra và được mã hóa trong hộp văn bản SO, chọn dấu ngoặc vuông khớp với 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);
}
Thử với số lượng trong array_chunk, quá lớn và nó có thể gây ra các vấn đề như truy vấn quá dài (vâng, có giới hạn có thể định cấu hình trong my.cnf), quá nhỏ và chi phí không cần thiết.
Bạn cũng có thể bỏ việc sử dụng gán $ data [x] cho các biến vì điều đó thật lãng phí vì script quá nhỏ, chỉ cần sử dụng $ data [x] trực tiếp trong truy vấn e.c.t. (sẽ không đưa ra một cải tiến lớn, nhưng tùy thuộc vào kích thước nhập của bạn, nó có thể tiết kiệm một chút).
Điều tiếp theo sẽ là sử dụng các bản cập nhật / chèn có mức ưu tiên thấp, hãy xem phần này để biết thêm thông tin về điều đó giúp bạn bắt đầu: Làm cách nào để ưu tiên cho các truy vấn nhất định?
sau tất cả những điều đó, bạn có thể nghĩ đến tối ưu hóa cấu hình mysql, nhưng đó là cách để google giải thích thực sự vì các cài đặt tốt nhất là khác nhau đối với mọi người và các tình huống riêng của họ
Chỉnh sửa: Một điều khác mà tôi đã làm trước đây là nếu bạn có nhiều khóa được thiết lập không cần thiết cho quá trình nhập, bạn có thể tạm thời bỏ các khóa đó và thêm chúng trở lại khi tập lệnh hoàn tất. Điều này cũng có thể mang lại những cải thiện tốt về thời gian, nhưng khi bạn làm việc trên cơ sở dữ liệu trực tiếp, có những cạm bẫy phải giải quyết nếu bạn đi theo lộ trình đó.