gpt4 book ai didi

php - mysqli::multi_query 是否比多个单个查询更有效?

转载 作者:可可西里 更新时间:2023-11-01 12:47:54 24 4
gpt4 key购买 nike

有人在回答中提出了 MySQLi multi_query 函数,声称它比循环执行 3 个单独的查询要好。我尝试用 Google 搜索一些答案,但没有真正满足我的好奇心,所以我希望你们能更好地了解使用它的原因,而不是节省几行代码。

所以这就是我想知道的:

  1. multi_query 在幕后做了什么?
  2. multi_query 是否只是访问服务器 x 次并汇总结果?
  3. 是否存在单个查询比多个查询更有效的情况?

我知道每次为一百万项访问数据库 3 次并将其粉碎成一个巨大的对象不利于内存使用,但我知道它的存在必须有一个原因而且我也确信那里是应该避免的时候。我希望能更好地理解它,以便在需要时将其放入我的技巧包中。

感谢您的宝贵时间!

最佳答案

  • multi_query 在幕后做了什么? - 只需一次将所有查询发送到服务器,而不是一次一个,然后一次检索所有结果。没有比这更复杂的了。

  • multi_query 是否只是点击服务器 x 次并汇总结果? - 它“点击”服务器两次 - 一次发送查询,一次检索结果。

  • 是否存在单个查询比多个查询更高效的情况? - 取决于您如何定义“高效”。 multi_query() 在网络上很轻,但内存很重,在循环中运行 query() 反之亦然。

    对于返回大型结果集的许多 SELECT 语句,内存消耗的损失可能大大超过网络方面的 yield ,大多数时候你最好发出查询并一次处理一个结果集——尽管这完全取决于您对数据的处理方式。但是如果您需要运行许多 UPDATE 语句,multi_query() 可能会更好,因为返回值只是成功/失败并且内存消耗会很轻.

    您必须权衡所有因素,例如您正在做的事情、您预计需要多长时间、(数据库)服务器和客户端之间的网络延迟、服务器上的可用资源(主要是内存)和客户等等……并根据具体情况进行处理。

我找到了这个 record of some performance testing前一段时间完成的,结论是使用 multi_query() 可以提高整体效率。 但是测试用例只是运行了 4 个查询,每个查询都SELECTing 一个结果,“更高效”的定义就是“更快”。没有针对更多查询或更大结果集的测试,虽然速度很重要,但它不是最重要的——如果我给它无限量的内存,我可以让任何东西运行得非常快,但是尝试同时做任何事情都会惨遭失败。它也不是真实世界的测试,因为最终结果可以通过单个 JOINed 查询获得。不过,它确实会带来一些有趣的阅读。

我个人觉得这有点学术性,因为如果您一次运行大量语句,90% 的时间它们只会在传递的数据和查询结构上有所不同将保持不变 - 这显然是准备好的陈述的候选对象。

关于php - mysqli::multi_query 是否比多个单个查询更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11120706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com