2017-04-14 9 views
2

テーブルは最初は空です。
私は20000行の後にトランザクションをコミットすると、1秒未満です。トランザクションがすべてのローが遅い理由は何ですか?

time php test.php 



real 0m0.785s 
user 0m0.220s 
sys  0m0.096s 

timeコマンドで enter image description here

$stmt = $conn->prepare("INSERT INTO ipTable (ip) VALUES (?)"); 
    $stmt->bind_param("i", $ip); 
    $conn->query('BEGIN'); 
    for($count = 0 ; $count < 20000 ; $count ++){ 
    $ip = rand(1,10000000); 
    $stmt->execute(); 
    } 
    $conn->query('COMMIT'); 
    $stmt->close(); 
    $conn->close(); 

しかし、私は$ conn->クエリからコメントしたときに( 'BEGIN'); $ conn-> query( 'COMMIT'); 、それは20分以上実行され、どのくらいの時間を待たなければならないのかわからない。私はctrl-cでそれを停止する必要があります。

 $stmt = $conn->prepare("INSERT INTO ipTable (ip) VALUES (?)"); 
     $stmt->bind_param("i", $ip); 
     //$conn->query('BEGIN'); 
     for($count = 0 ; $count < 20000 ; $count ++){ 
     $ip = rand(1,10000000); 
     $stmt->execute(); 
     } 
     //$conn->query('COMMIT'); 
     $stmt->close(); 
     $conn->close(); 

enter image description here

答えて

1

自動コミット

$conn->autocommit(TRUE);

$conn->autocommit(TRUE); 
$stmt = $conn->prepare("INSERT INTO ipTable (ip) VALUES (?)"); 
$stmt->bind_param("i", $ip); 
//$conn->query('BEGIN'); 
for($count = 0 ; $count < 20000 ; $count ++){ 
    $ip = rand(1,10000000); 
    $stmt->execute(); 
} 
//$conn->query('COMMIT'); 
$stmt->close(); 
$conn->close(); 
+0

にそれが動作感謝を回してみたが、なぜですか? –

+0

なぜ$ conn-> autocommit(TRUE)なし;それは遅く走る? –

+0

私はautocommitがどこかにfalseに設定されていると思います。つまり、falseに設定されていると、トランザクションを開始するタイミングと終了するタイミングを指定する必要があるため、機能していませんでした。これでオートコミットは真です。実行するたびにdbに変更が加えられます。 – noyanc

関連する問題