我正在接管一个PHP应用程序,它每次运行SQL语句时都使用MySQL PDO预处理语句.
我知道,当您要对同一语句进行多次迭代时,准备SQL会更有效.
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
$sth->execute(array(175, 'yellow'));
$yellow = $sth->fetchAll();
但是,我接管的应用程序在PDO之上构建了一个层,它调用了一个常见的“执行”函数,它似乎准备了每个单独的SQL查询.例如:
$query = self::$DB->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$query->execute($bindvars);
如果应用程序执行了数百或数千次“INSERT INTO …… ON DUPLICATE KEY UPDATE”SQL语句,那么$DB-> prepare()步骤是否每次运行都会产生很大的开销?
非常感谢,杰森.
解决方法:
从文档:
Calling PDO::prepare() and
PDOStatement::execute() for statements
that will be issued multiple times
with different parameter values
optimizes the performance of your
application by allowing the driver to
negotiate client and/or server side
caching of the query plan and meta
information…
我在这里并没有真正做出任何启示,但“优化性能”的反面确实是“开销”.至于它是否重要,为什么不以任何方式运行循环并测量?然后,您可以使用硬数据自行决定备份您的决策.
标签:php,mysql,pdo,prepared-statement
来源: https://codeday.me/bug/20190531/1188034.html