如何避免连接过多?

Ric*_*rdo 6 sql sql-server join query-tuning

我希望您能帮助讨论如何使用通用方法避免过多的连接。对此有一般规则吗?

目前,我有一个非常复杂的查询,它连接了 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
Run Code Online (Sandbox Code Playgroud)

Mr.*_*. K 5

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

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

使用以下方法封装一些连接:-

  • 使用热膨胀系数
  • 使用临时表
  • 意见

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