sql >> Database >  >> RDS >> Mysql

hoe deze SQL-invoeg-php-code te optimaliseren?

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);



  1. JPA 2.0 Oracle DATE heeft nultijd

  2. CannotAcquireLockException (Spring, Hibernate, MySQL)

  3. Dynamische SQL met behulp van configuratietabellen

  4. MySQL INNER JOIN van 3 tabellen met telling en totalen