2
Die Tabelle ist zunächst leer.
Wenn ich die Transaktion nach 20000 Zeile commit, kostet es weniger als 1 Sekunde. Warum eine Transaktion in jeder Zeile so langsam ist?
$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();
mit Zeitbefehl
time php test.php
real 0m0.785s
user 0m0.220s
sys 0m0.096s
Aber als ich aus der $ kommentiert conn-> query ('BEGIN'); $ conn-> Abfrage ('COMMIT'); , es läuft mehr als 20 Minuten und weiß nicht, wie viel Zeit ich warten muss, um zu beenden. Ich muss es mit Strg-C stoppen.
$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();
Dank es funktioniert, aber warum? –
warum ohne $ conn-> autocommit (TRUE); läuft es langsam? –
Ich denke du hast Autocommit irgendwo falsch gesetzt. Es funktionierte nicht, denn wenn es auf "false" gesetzt ist, muss man sagen, wann die Transaktion beginnen soll und wann (commit). Jetzt ist Autocommit wahr. Jedes Mal, wenn es ausgeführt wird, werden die Änderungen an der Datenbank vorgenommen. – noyanc