【问题标题】:Does mysqli_multi_query send the whole SQL to the database in a single trip?mysqli_multi_query 是否一次将整个 SQL 发送到数据库?
【发布时间】:2011-07-24 18:31:36
【问题描述】:

我严重怀疑 mysqli 的多查询是否真的是多查询,因为从 Web 服务器到数据库的总行程仅为 1。

如果我们调用 5-statement 多查询,我们必须执行一次 multi_query() 和 next_result() 4 次。

那么从网络服务器到数据库不是还有 5 次访问吗?

此外,mysqli_use_result()mysqli_more_results()mysqli_store_result() 每次调用都需要访问一次数据库?

【问题讨论】:

  • 好问题。我怀疑查询将被一起发送,并且结果将在引擎盖下以合理大小的块进行缓冲。连接本身应该是持久的以节省开销。不过,我期待一些专家的回答。

标签: php mysqli mysqli-multi-query


【解决方案1】:

是的。 mysqli::multi_query 确实在同一个 MySQL 数据包中发送多个查询。

【讨论】:

  • 那么您的意思是mysqli_use_result()mysqli_next_result().mysqli_more_results()mysqli_store_result() 都是在Web 服务器端完成的,不需要访问数据库?
  • 我不确定。如果知道很重要,您可以使用strace 跟踪您的 PHP 脚本并亲自查看。
【解决方案2】:

是的,mysqli:multi_query() 确实将 SQL 一次性发送到服务器。此操作是异步的。 PHP 不会等待 MySQL 执行完整的 SQL。一旦 mysqli 得到一个结果,控制权就交还给 PHP 脚本,同时 SQL 继续在 MySQL 服务器上执行。

但是,要获得结果,您需要阻止 PHP 脚本并要求 MySQL 提供结果。这就是为什么如果您希望收到 5 个结果,您需要拨打 next_result() 4 次。每个调用都会重新访问服务器以请求结果,结果可能已经准备好等待获取。

实际上,您最终可能会访问 MySQL 服务器超过 5 次。 值得指出的是,这不会单独提高 PHP 脚本的性能。除非您有充分的理由在 MySQL 服务器上批量执行 SQL,否则不要使用 mysqli::multi_query()。坚持使用准备好的语句。

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多