学说1.2性能,创造大量记录(~5000)

时间:2012-05-07 15:01:10

标签: php mysql performance doctrine-1.2

假设用户是扩展Doctrine_Record的模型,请考虑创建5000个用户记录的以下(任意)代码。

$conn->beginTransaction();

for ($i = 1, $i < 5001, $i++) {

    $user = new User();
    $user->some_field = $i;
    $user->save();
    $user->free(true);
}

$conn->commit();

我发现此脚本在30秒后超时并且无法创建所有用户。有没有办法优化此代码以更快地工作?我正在考虑编写常规的旧SQL来创建记录,但后来我失去了Doctrine_Record的功能,包括插入钩子等(请注意,即使User模型中没有钩子,此脚本也会超时)。

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

您应该尝试允许批量插入的Doctrine_Collection类:

$collection = new Doctrine_Collection('tablename');
$collection->add($record1);
$collection->add($record2);
$collection->add($record3);
$collection->add($record4);
$collection->save();