php – mysqli :: multi_query比几个单一查询更有效吗?

有人在答案中提出了 MySQLi multi_query函数,声称它比循环遍历3个单独的查询要好.我尝试了Google的某些答案,但并没有真正满足我的好奇心,所以我希望你们可以更好地了解使用它的原因,而不是保存几行代码.

所以这就是我想知道的:

>什么是multi_query在引擎盖下做什么?
> multi_query是否只是简单地命中服务器x次并聚合结果?
>是否存在单个查询可能比多个查询更有效的情况?

我知道每次击中数百万个项目并将其粉碎成一个巨大的物体3次并不利于内存使用,但我知道必须存在它存在的原因而且我也确定有时候应该避免.我希望能够更好地理解它,这样我就可以在需要时把它放到我的包里.

谢谢你的时间!

>什么是multi_query在引擎盖下做什么? – 只需将所有查询一次性发送到服务器而不是一次发送,并一次性检索所有结果.没有比这更复杂的了.
> multi_query是否只是简单地命中服务器x次并聚合结果? – 它“命中”服务器两次 – 一次发送查询,一次检索结果.
>是否存在单个查询可能比多个查询更有效的情况? – 取决于你如何定义“有效”. multi_query()在网络上很轻但内存很重,在循环中运行query()反之亦然.

对于许多返回大型结果集的SELECT语句,内存消耗的损失可能远远超过网络方面的增益,并且大多数情况下您最好一次发出一个查询并处理结果集 – 虽然这完全取决于您对数据做了什么.但是如果你需要运行许多UPDATE语句,那么multi_query()可能会更好,因为返回值只是成功/失败并且内存消耗很少.

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

我刚刚发现这个record of some performance testing已经完成,其结论是使用multi_query()可以获得整体效率增益.然而,测试用例只是运行4个查询,每个查询选择一个结果,“更高效”的定义只是“更快”.没有测试大量的查询或更大的结果集,虽然速度很重要,但它并不是万能而且最终 – 如果我给它无限量的内存,我可以让任何东西运行得非常快,但是试图同时做任何事都会失败.它也不是真实世界的测试,因为最终结果可以通过单个JOINed查询来实现.虽然它确实有一些有趣的读物.

我个人觉得这有点学术性,因为如果你同时运行一大堆语句,90%的时间它们只会在传递的数据中有所不同,查询结构将保持不变 – 这是一个明显的候选人准备好的陈述.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...