Mange tak tadman og Hanlet Escaño og Uuerdo og Julie Pelletier og Solarflare for at hjælpe mig i kommentarerne.
Jeg lavede 3 forskellige ændringer i min PHP-kode ved at bruge de metoder, du foreslog i kommentarerne, derefter testede jeg resultaterne, og her er testresultaterne.
Konklusionen på de 3 tests: som tadman foreslog, er nøglen i INDLÆS DATAINFIL . det reducerede udførelsestiden dramatisk til mindre end 7 sekunder, og disse er de 3 tests.
ORIGINAL KODE: ~ 26 minutter
TEST 1 : ~ 34 minutter
(som Uuerdo
foreslog, at jeg fjernede echo
sætninger og rækketælleren fra løkken)
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 sekunder
(Som tadman sagde, at jeg søgte efter INDLÆS DATAINFIL og det var super kraftfuldt
//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 sekunder
Det var det samme som test 2, bortset fra at jeg fandt nyttige tips på den samme side, som tadman giver, som hjælper med at maksimere hastigheden til.
Masseindlæsning af data til InnoDB-tabeller
// 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);