sql >> Databáze >  >> RDS >> Mysql

jak optimalizovat tento vkládací php kód sql?

Moc děkuji tadman a Hanlet Escaño a Uueerdo a Julie Pelletier a Solarflare za pomoc v komentářích.

Provedl jsem 3 různé změny v mém PHP kódu pomocí přístupů, které jste navrhli v komentářích, pak jsem otestoval výsledky a zde jsou výsledky testů.

Závěr 3 testů: jak navrhl tadman, klíč je v LOAD DATA INFILE . dramaticky to zkrátilo dobu provádění na méně než 7 sekund a toto jsou 3 testy.

PŮVODNÍ KÓD: ~ 26 minut

TEST 1: ~ 34 minut

(jako Uueerdo navrhl, abych odstranil echo příkazy a počítadlo řádků ze smyčky)

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 sekund

(Jako tadman řekl, že jsem hledal LOAD DATA INFILE a byl super výkonný

//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 sekund

Bylo to stejné jako v testu 2 kromě toho, že jsem na stejné stránce, kterou poskytuje tadman, našel užitečné tipy, které pomáhají maximalizovat rychlost pro.

Hromadné načítání dat pro tabulky 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);



  1. Pořadí vrácení řádku SQL

  2. Scénáře a kroky získají problém poslední změny

  3. Připojte se jako uživatel bez nastaveného hesla na Postgresql 8.4 přes JDBC

  4. aioMySQL se nepřipojuje k pythonu