2

我需要在数据库中记录每个事务的日志,但我注意到使用 COMMIT 而不是使用的不同行为。
当我使用提交时,循环中的每一轮实际上都是零,而当我不使用提交时,时间会更大。
我想知道这种行为是否正常,是否有办法准确地管理时间。
谢谢你

$microtimeA = microtime( true );
$pdo->beginTransaction();

$i=1;
while($i<=5)
{
    $microtimeB = microtime( true );
    $stmt = $pdo-> prepare( "INSERT INTO BLOG ( TITLE ) VALUES ( $i ) ");
    $stmt-> execute();
    $i++;
    echo "<p>" , number_format( microtime( true ) - $microtimeB , 4 ) , "</p>";
}
$pdo-> commit();

echo "<p>[" , number_format( microtime( true ) - $microtimeA , 4 ) , "]</p>";

提交:
1:0.0003
2:0.0002
3:0.0002
4:0.0002
5:0.0002
[0.0228]

无提交:
1:0.0149
2:0.0197
3:0.0416
4:0.0135
5:0.0332
[0.1229]

4

1 回答 1

0

提交事务时,您的数据库正在将数据刷新到磁盘。这通常是一个缓慢的操作,因为它需要等待旋转硬盘的至少一圈。

在您的“无提交”情况下,您的数据库将自动提交每个事务。因此,您有 5 次单独的磁盘刷新。

在您的“提交”情况下,您只刷新到磁盘一次。

数字支持这一点:0.1229 几乎是 0.0228 的五倍

于 2013-05-09T20:03:59.213 回答