具有连接或多个结果集

Posted

技术标签:

【中文标题】具有连接或多个结果集【英文标题】:Having join or multiple resultsets 【发布时间】:2021-04-30 18:16:32 【问题描述】:

我有以下 2 个具有一对多关系的表。表 ORDER 和 ORDER_DETAILS。我正在使用 C# 调用存储过程来进行一些处理,但最终它应该返回带有相应详细信息的订单。

所以问题是以下 2 个中哪一个更优化。

    选择订单并加入订单详情,然后在c#中获取数据。 有 2 个结果集、1 个订单和订单订单详细信息,然后在 c# 中构建数据。

我的猜测是,由于连接将在每个订单详细信息中重复订单表中的相同列,因此第二个选项是最好的。

您对以上内容有何看法。

【问题讨论】:

针对什么进行了优化?数据传输?数据库性能?我们在这里讨论了多少数据? 试图避免重复的列值是过早的优化。这就是 SQL 结果集的外观,在过去的三年多的时间里一直没有出现问题。 你想要所有的订单,还是只想要其中的几个? 您的描述太模糊了,任何人都无法在没有猜测的情况下制作有用的 cmets。忽略效率方面(直到您有实际需求才能衡量),您需要关注两个不同的事情。首先很好地描述了“进行一些处理并返回订单”的实际含义。其次是您的应用程序打算如何处理这些信息以及最有效地使用这些信息所需的格式。 如果你不想/喜欢“重复的列”,那么改变你的查询以不产生重复。 【参考方案1】:

@Steve 提出了正确的问题。你需要澄清这一点。

但在大多数情况下,我会选择第一个选项。在数据库端连接两个表并只为前端选择必要的列。

通过这种方式,您需要传输较少量的数据,并且在正常情况下,它应该比从两个表中获取数据并在前端构建数据要快。但如果不了解您的正确上下文,它可能不是最好的解决方案。

【讨论】:

以上是关于具有连接或多个结果集的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Django 中的 get_queryset 方法返回多个查询集对象或添加查询集结果

实体框架 - 具有多个结果集的存储过程 - 没有行返回

SQL 操作结果集 -并集差集交集结果集排序

SQL 操作结果集 -并集差集交集结果集排序

具有多个结果集的NHibernate存储过程[重复]

SQL 操作结果集 -并集差集交集结果集排序