Php Phalcon批量插入性能。模型还是原始SQL
有没有办法在phalcon php中进行批量插入 我尝试使用Php Phalcon批量插入性能。模型还是原始SQL,php,performance,insert,bulk,phalcon,Php,Performance,Insert,Bulk,Phalcon,有没有办法在phalcon php中进行批量插入 我尝试使用\Phalcon\Mvc\Model create插入10000条记录,也尝试使用原始SQL插入10000条记录:插入“tablename”(a,b,c)值(),(),()。。。() 我设置了这个非常简单的测试,结果让我很惊讶 使用\Phalcon\Mvc\Model大约需要36秒 使用原始sql需要3,6秒 \Phalcon\Mvc\Model: $transactionManager = new TransactionManag
\Phalcon\Mvc\Model create
插入10000条记录,也尝试使用原始SQL插入10000条记录:插入“tablename”(a,b,c)值(),(),()。。。()
我设置了这个非常简单的测试,结果让我很惊讶
- 使用\Phalcon\Mvc\Model大约需要36秒
- 使用原始sql需要3,6秒
$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();
$transactionManager=新建transactionManager();
$transaction=$transactionManager->get();
$entity=新实体();
$entity->setTransaction($transaction);
对于($i=0;$i<10000;$i++){
$entity->setValue1(兰特(1,50));
$entity->setValue2(兰特(1,50));
$entity->setValue3(兰特(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);
$query=“插入到“表名”(a、b、c)值中”;
对于($i=0;$i<10000;$i++){
$values.=“(“.rand(1,50)。”、“.rand(1,50)。”、“.rand(1,50)。”)”;
}
$values=substr($values,0,strlen($values)-1);
$query.=$value;
$this->db->query($query);
Phalcon\Mvc\Model速度较慢,因为它为每个插入创建一个PHQL语句,然后对其进行解析并转换为当前DBMS支持的SQL方言。PHQL解析是导致这种速度变慢的原因
如果需要性能,您必须自己生成INSERT语句。一位Phalcon用户为此问题创建了一个库,
看看。是的,我明白。我感到惊讶的是,一个旨在成为最快的php框架的框架并没有提供一种进行批量插入/更新/等的方法。我也知道,人们总是可以手动生成insert语句。不过我还是在寻找使用Phalcon模型进行批量插入的可能性。并非所有Phalcon支持的DBMS都支持批量插入(例如SQLite)