我严重怀疑 mysqli 的多查询是否真的是多查询,因为从 Web 服务器到数据库的总行程仅为 1。
如果我们调用 5 语句多查询,我们必须执行 multi_query() 一次和 next_result() 4 次。
那么,从 Web 服务器到数据库的次数还不是 5 次吗?
此外,mysqli_use_result()
每次 mysqli_more_results()
调用mysqli_store_result()
都需要一次访问数据库?
我严重怀疑 mysqli 的多查询是否真的是多查询,因为从 Web 服务器到数据库的总行程仅为 1。
如果我们调用 5 语句多查询,我们必须执行 multi_query() 一次和 next_result() 4 次。
那么,从 Web 服务器到数据库的次数还不是 5 次吗?
此外,mysqli_use_result()
每次 mysqli_more_results()
调用mysqli_store_result()
都需要一次访问数据库?
是的。mysqli::multi_query
确实在同一个 MySQL 数据包中发送多个查询。
是的,mysqli:multi_query()
确实将 SQL 一次性发送到服务器。此操作是异步的。PHP 不会等待 MySQL 执行完整的 SQL。一旦 mysqli 得到一个结果,控制权就交还给 PHP 脚本,同时 SQL 继续在 MySQL 服务器上执行。
但是,要获得结果,您需要阻止 PHP 脚本并要求 MySQL 提供结果。next_result()
这就是为什么如果您希望收到 5 个结果,您需要调用4 次。每个调用都会重新访问服务器以请求结果,这些结果可能已经准备好并等待获取或未获取。
在实践中,您最终可能会访问 MySQL 服务器超过 5 次。值得指出的是,这不会单独提高 PHP 脚本的性能。除非您有充分的理由在 MySQL 服务器上批量执行 SQL,否则不要使用mysqli::multi_query()
. 坚持使用准备好的语句。