【问题标题】:Can PDO bindParam() or bindValue() make the db does soft parsing?PDO bindParam() 或 bindValue() 可以使数据库进行软解析吗?
【发布时间】:2020-02-07 13:02:32
【问题描述】:

对于PHP,我正在尝试在for循环中使用PDO执行许多查询,我想让DB优化器进行软解析。

我现在正在绑定参数,但我不确定优化器是否真的使用了软解析。

示例查询

select * from table as t where t.id = :id ;

PHP代码

$query = "select * from table as t where t.id = :id ;"
$pdo->prepare($query);
$id = 0;
$query->bindParam(':id', $id, PDO::PARAM_INT);
for($id; $id<10; $id++){
    $query->execute()
}

【问题讨论】:

  • 请定义“软解析”。

标签: php sql pdo mariadb bindparam


【解决方案1】:

我不确定我理解什么是软解析,但在您的情况下,查询只会被解析一次,这可能就是您要问的问题。

一些笔记。

  1. 您需要确保emulation mode is turned off.
  2. 通过这样一个简单的查询,您可能不会注意到任何性能改进。现在的解析速度真的很快。
  3. 虽然我知道您的查询只是一个示例,但是,与其在循环中运行 SELECT 查询,不如在单个查询中使用 gather all ids into IN() clause 或使用 JOIN(如果适用)。
  4. 使用 DML 语句运行多个类似查询是相当合理的。在这种情况下,如果您关心的是性能,我宁愿建议将所有查询包装在一个事务中,在某些情况下可以大大提高速度

【讨论】:

  • 感谢您的回答 :) 我的查询实际上很长,我在上面加入了许多表格。我的客户使用该查询在我的网站上搜索了多种信息。所以我很好奇。
  • @체라치에 但你没有在循环中运行搜索查询,所以我不知道你的问题到底是什么
  • 他们向我发送了许多类似的查询(例如,这个非常简化)“select * from table_a a, table_b b where a.id = 2 and b.dt >= '2019- 10-01' 和 b.dt = :start_dt and b. dt
  • 这是完全不同的问题。
  • 这就是我提到软解析的原因。好吧,我会打开另一个问题。
猜你喜欢
  • 2014-07-28
  • 2011-04-13
  • 2013-02-15
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 2014-05-10
  • 2023-03-28
相关资源
最近更新 更多