Mam skrypt który insertuje mi 500 rekordów. Skrypt jest umieszczony na SAX.PL oraz na PHP5.SK
Na SAX.PL insert 500 rekordów trwa 22 sekundy a na PHP5.SK trwa 12 sekund. Dlaczego trwa to tak długo? Czy można to jakoś przyśpieszyć? Skrypt któy uruchamiam:
<?php
const DB_MYSQLI_HOST = 'localhost';
const DB_MYSQLI_PORT = 3306;
const DB_MYSQLI_USER = 'xxxxxxxxx';
const DB_MYSQLI_PASS = 'xxxxxxxxxxxx';
const DB_MYSQLI_NAME = 'name_name';
const DB_MYSQLI_CHAR = 'UTF-8';
$db_info = array( "db_host" => DB_MYSQLI_HOST
, "db_port" => DB_MYSQLI_PORT,
"db_user" => DB_MYSQLI_USER,
"db_pass" => DB_MYSQLI_PASS,
"db_name" => DB_MYSQLI_NAME,
"db_charset" => DB_MYSQLI_CHAR
);
$instance = NULL;
try {
$instance = new PDO("mysql:host=".$db_info['db_host'].';port='.$db_info['db_port'].';dbname='.$db_info['db_name'], $db_info['db_user'], $db_info['db_pass']);
$instance->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
$instance->setAttribute( PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING );
$instance->query('SET NAMES ' . $db_info['db_charset']);
$instance->query('SET CHARACTER SET ' . $db_info['db_charset']);
}
catch(PDOException $e) {
LOG::e('Brak połączenia z bazą');
}
$stmt = $instance->prepare('DROP TABLE IF EXISTS Test_tbl');
if (!$stmt->execute())
$stmt = $instance->prepare('CREATE TABLE Test_tbl (IMIE VARCHAR(100), NAZWISKO VARCHAR(100), ADRES VARCHAR(100))');
if (!$stmt->execute())
for($x=0; $x<500; $x++) {
array_push($a, array('imie'=>'Pablo'.$x, 'nazwisko'=>'Picasso'.$x, 'adres'=>'Nowowiejska '.$x)); }
foreach($a as $b) {
$stmt = $instance->prepare('INSERT INTO Test_tbl (IMIE, NAZWISKO, ADRES)
values (:IMIE, :NAZWISKO, :ADRES)');
$stmt->bindValue(':IMIE', $b['imie'], PDO::PARAM_STR);
$stmt->bindValue(':NAZWISKO', $b['nazwisko'], PDO::PARAM_STR);
$stmt->bindValue(':ADRES', $b['adres'], PDO::PARAM_STR);
if (!$stmt->execute()) echo (implode('; ', $stmt->errorInfo())); }
$stmt = $instance->prepare('DROP TABLE Test_tbl');
if (!$stmt->execute())
?>
Ten post edytował Rozpalacz 9.01.2015, 22:57:01