2
表格一開始是空的。
當我在20000行之後提交事務時,它的成本不到1秒。 爲什麼每一行提交事務都很慢?
$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();
隨着時間的命令
time php test.php
real 0m0.785s
user 0m0.220s
sys 0m0.096s
但是當我註釋掉$ conn->查詢( 'BEGIN'); $ conn->查詢( '提交'); ,它運行了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();
感謝它的工作,但是爲什麼呢? –
爲什麼沒有$ conn-> autocommit(TRUE);它運行緩慢? –
我想你有autocommit設置爲false的地方。所以它不起作用,因爲當設置爲false時,你必須告訴它何時開始事務以及何時完成(提交)。現在自動提交是真實的。每次執行它都會對數據庫進行更改。 – noyanc