Hartelijk dank tadman en Hanlet Escaño en Uueerdo en Julie Pelletier en Solarflare om me te helpen in de reacties.
Ik heb 3 verschillende wijzigingen in mijn PHP-code aangebracht met behulp van de benaderingen die je in de opmerkingen hebt voorgesteld, daarna heb ik de resultaten getest en hier zijn de testresultaten.
De conclusie van de 3 tests: zoals tadman suggereerde, zit de sleutel in LOAD DATA INFILE . het heeft de uitvoeringstijd drastisch teruggebracht tot minder dan 7 seconden, en dit zijn de 3 tests.
ORIGINELE CODE: ~ 26 minuten
TEST 1: ~ 34 minuten
(as Uueerdo
stelde voor om de echo
te verwijderen statements en de rijenteller uit de lus)
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>";}
*/};
TEST 2: ~ 7 seconden
(Als tadman zei dat ik zocht naar LOAD DATA INFILE en het was super krachtig
//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);
TEST 3: ~ 5 seconden
Het was hetzelfde als test 2, behalve dat ik op dezelfde pagina nuttige tips vond die tadman gaf, die helpen bij het maximaliseren van de snelheid voor.
Bulkgegevens laden voor InnoDB-tabellen
// 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);