繁体   English   中英

如何避免过多的连接?

[英]How to avoid too many joins?

我希望你能帮忙讨论如何使用通用方法避免过多的连接。 这是一般规则吗?

目前,我有一个非常复杂的查询,加入11个表,性能非常差(即使有索引和更新的统计信息)。 使用Entity Framework Profiler,我收到了减少连接数的建议,而是执行了几个单独的查询: link

每个连接都要求数据库执行其他工作,并且每次额外连接时查询的复杂性和成本都会快速增长。 虽然关系数据库已针对处理联接进行了优化,但执行多个单独的查询通常更有效,而不是单个查询中包含多个联接。

我应该如何修改以下示例以获得更好的性能?

select  *
from   Blogs blog0_
       inner join Posts posts1_
         on blog0_.Id = posts1_.BlogId
       inner join Comments comments2_
         on posts1_.Id = comments2_.PostId
       inner join Users user3_
         on posts1_.UserId = user3_.Id
       inner join UsersBlogs users4_
         on blog0_.Id = users4_.BlogId
       inner join Users user5_
         on users4_.UserId = user5_.Id

有几种方法可以最小化(优化)表连接数: -

  • 确保您想要什么以及需要哪些表。
  • 还要确保表格是标准化形式。

使用以下方法封装几个连接: -

  • 使用CTE
  • 使用临时表
  • 查看

您可以从Common Table ExpressionView链接中找到有关CTE和Temp表的详细信息。 对于临时表,只需在表名前添加“#”并从连接中插入所需数据,然后在同一会话中使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM