TSQL 多个连接与来自 ASP.NET Core 的多个请求?

Posted

技术标签:

【中文标题】TSQL 多个连接与来自 ASP.NET Core 的多个请求?【英文标题】:TSQL multiple joins vs multiple requests from ASP.NET Core? 【发布时间】:2019-06-16 06:40:01 【问题描述】:

我正在创建一个使用 Dapper 连接到数据库的 ASP.NET Core 应用程序。在我的一个商务课程中,我必须从 4 个表中获取一些相当大的数据集。有什么更好的解决方案?

    使用 4 个内部连接创建选择。

    创建没有内部连接的基本选择,然后在 C# 中 foreach 该集合并调用另一个选择以从下一个表中获取数据等。

它基本上是在对数据库的一个请求之间进行选择,该请求将选择大量数据或对数据库的多个请求以获取多个较小的数据部分。

【问题讨论】:

Better是什么方面?加入解决方案可能应该是最快的解决方案。你应该race your horses。 【参考方案1】:

以下是我认为 Join 应该更好用的几个原因:

    只要您在 SQL 中应用正确的过滤条件 查询,您将只从数据库中获取所需的数据 进入你的应用层。与此相反,如果你做 4 单独的选择,您可能最终不得不带来比 最终需要什么。 通过您的 odbc/jdbc 连接调用 1 次数据库引擎 vs 4 次单独调用。 如果您已正确索引基础表以覆盖 查询,关系引擎是执行连接的最佳位置 结构化数据,因为它们是为此目的而设计的。 根据数据类型和底层结构,SQL Server 将 想出访问数据的最佳方式,加入数据是否 执行索引合并连接、嵌套循环连接或哈希连接 在查询的不同点的不同数据集之间,相应地为这些活动分配适当的 RAM VS 你 试图设计和编码底层的 SQL Server 搜索和排序 在您的应用程序中自行决定算法和存储决策,以便对这 4 个单独选择的提取结果执行相同的任务。

【讨论】:

谢谢。有什么办法可以延迟其中一个内部连接?我相信这会优化查询还是没有?例如,我正在按一个表的列过滤行,然后当我得到这些行时,我想用我得到的记录对另一个表进行内部连接。我相信如果我只是让 FROM.. WHERE.. INNER JOIN ... 等等,加入将发生在我的 where 子句之前。 当您连接 2 个表并在 join 子句中应用连接条件并在第一个表的 where 子句中过滤条件(如果有)时,SQL Server 在执行计划构建期间会考虑所有这些如果您正确调整底层结构,则尝试使用尽可能少的数据。请记住,您选择的列也有很大的作用。因此,请尝试仅选择您需要的列,并且这些选定的列应被索引覆盖,以便更快地检索数据。 如果我从joined表中选择summary ~~~40个字段,我应该做40个索引吗? 不,你不应该犯这样的错误。为了能够提供适当的性能调优建议,您至少应该提供查询、底层表结构、数据大小、执行计划。一般来说,如果您觉得自己在这方面的理解上存在一些差距,我建议您阅读有关如何创建索引、如何提出好的索引策略等方面的书籍/学术文章。对于一些快速提示,您可以查看我在这些问题中的一些答案: 1> ***.com/questions/56582008/… 2> ***.com/questions/56585071/…

以上是关于TSQL 多个连接与来自 ASP.NET Core 的多个请求?的主要内容,如果未能解决你的问题,请参考以下文章

ASP .NET CORE 根据环境变量支持多个 appsettings.json

TSQL IVF 导致 ASP.net 应用程序超时

ASP.NET Core MVC 中的 TreeView(来自 SQL 的数据)

如何在Asp.Net Core中注册同一接口的多个实现?

来自 AuthorizationHandler (ASP.NET Core) 的自定义重定向

ASP .NET CORE 根据环境变量支持多个 appsettings.json