这是一个在我所在的地方一直弹出的主题。对于返回行列表的查询类型,我们通常希望执行进一步的查询以收集有关该特定行的更多信息,这通常包括本身返回行列表的查询。这方面的一个例子是一个返回客户列表的订单系统,每个客户“行”也可能显示他们的订单列表(可能在弹出对话框中)。
通常是否“更好”:
- 执行一个查询,
GROUP_CONCAT
尽可能使用并以编程方式拆分结果(返回的连接的长度有限制) - 在遍历“父查询”的结果时对每一行执行“子查询”
- 执行一个“父查询”以返回客户列表,并使用 SQL
IN
关键字执行一个“订单”查询以匹配从前一个查询返回的 customer_ID。循环通过客户查询的结果,我们可以看到 customer_ID 是否存在于订单查询中,并显示匹配的订单。 - 在何时执行第二个查询。原因是我们并不总是希望看到每个父结果的子结果(使用网络应用程序,我们可以使用 AJAX 来获取子结果)
- 还有什么?
我一直倾向于#2,因为从概念上讲它似乎是最干净的解决方案,但我不禁认为它是一种资源消耗。对一组特定的结果进行我们自己的基准测试,#3 出来的速度最快。#4 似乎应该是最快的,因为某些应用程序不需要显示所有结果,但是,目的可能是让结果准备好并等待,而不是再次往返来检索该行的子数据。我不完全确定FETCH_ASSOC
etc. 的机制是如何工作的,但是非常欢迎任何建议!