बहुत-बहुत धन्यवाद tadman और Hanlet Escaño और Uueerdo और जूली पेलेटियर और Solarflare टिप्पणियों में मेरी मदद करने के लिए।
मैंने टिप्पणियों में आपके द्वारा सुझाए गए तरीकों का उपयोग करके अपने PHP कोड में 3 अलग-अलग बदलाव किए, फिर मैंने परिणामों का परीक्षण किया और यहां परीक्षण के परिणाम दिए गए हैं।
तीन परीक्षणों का निष्कर्ष: जैसा कि टैडमैन ने सुझाव दिया था, कुंजी LOAD DATA INFILE . इसने नाटकीय रूप से निष्पादन समय को 7 सेकंड से कम कर दिया, और ये 3 परीक्षण हैं।
मूल कोड: ~ 26 मिनट
परीक्षा 1 : ~ 34 मिनट
(जैसा Uueerdo
सुझाव दिया कि मैंने echo
को हटा दिया है बयान और पंक्तियाँ लूप से काउंटर)
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>";}
*/};
परीक्षा 2 : ~ 7 सेकंड
(जैसा tadman ने कहा कि मैंने LOAD DATA INFILE की खोज की और यह बहुत शक्तिशाली था
//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);
परीक्षा 3: ~ 5 सेकंड
यह परीक्षण 2 के समान ही था, सिवाय इसके कि मुझे उसी पृष्ठ पर उपयोगी टिप्स मिले, जो टैडमैन देते हैं, जो कि गति को अधिकतम करने में मदद करते हैं।
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);