我有一个 PHP 应用程序,它在 PostgreSQL 和 MySQL 中使用带有准备好的语句的 PDO,我想知道每次在执行之前准备完全相同的语句是否会对性能造成影响。
在伪代码中,示例如下:
for ($x=0; $x<100; $x++) {
$obj = PDO::prepare("SELECT x,y,z FROM table1 WHERE x=:param1 AND y=:param2");
$obj->execute(array('param1'=>$param1, 'param2'=>$param2));
}
与准备一次并执行多次不同:
$obj = PDO::prepare("SELECT x,y,z FROM table1 WHERE x=:param1 AND y=:param2");
for ($x=0; $x<100; $x++) {
$obj->execute(array('param1'=>$param1, 'param2'=>$param2));
}
我多次搜索过这个问题,但似乎在 PHP、PostgreSQL、MySQL 中都找不到对此问题的引用。
最佳答案
是的,它在某种程度上违背了使用准备好的语句的目的。准备允许数据库预先解析查询并为执行做好准备。当您执行该语句时,数据库只需插入您提供的值并执行最后几个步骤。
当您在这样的循环中进行准备时,所有准备工作都会被丢弃并每次重新完成。你应该拥有的是:
$obj = PDO::prepare("SELECT x,y,z FROM table1 WHERE x=:param1 AND y=:param2");
for ($x=0; $x<100; $x++) {
$obj->execute(array('param1'=>$param1, 'param2'=>$param2));
}
准备一次,执行多次。
关于mysql - 多次准备语句时的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18963570/