有没有办法在phalcon php中进行批量插入?
我尝试使用 PhalconMvcModel create
插入 10000 条记录,并使用原始 SQL 插入相同的记录:insert into 'tablename' (a, b, c) values (), (), (), ... ()
我设置了这个非常简单的测试,并对结果感到惊讶
- 使用 \Phalcon\Mvc\Model 大约需要 36 秒
- 使用原始SQL需要3,6秒。
Phalcon\Mvc\Model:
$transactionManager = new TransactionManager();
$transaction = $transactionManager->get();
$entity = new Entity();
$entity->setTransaction($transaction);
for($i = 0; $i < 10000; $i++){
$entity->setValue1(rand(1,50));
$entity->setValue2(rand(1,50));
$entity->setValue3(rand(1,50));
}
$entity->create();
$transaction->commit();
原始 SQL:
$query = "insert into 'tablename' (a, b, c) values ";
for($i = 0; $i < 10000; $i++){
$values .= "(" . rand(1,50) . ", " . rand(1, 50). ", " . rand(1, 50). "),";
}
$values = substr($values, 0, strlen($values) - 1);
$query .= $values;
$this->db->query($query);
Phalcon用户为此问题创建了一个库,在这里查看。
Phalcon\Mvc\Model 很慢,因为它为每个 INSERT 创建一个 PHQL 语句,然后解析它并转换为当前 DBMS 支持的 SQL 方言。PHQL 解析是导致速度变慢的原因。
如果需要性能,则必须自己生成 INSERT 语句。