2014-09-24 75 views
3

我想你的幫助來討論如何使用通用方法避免太多的聯接。這是否有一個通用規則?如何避免太多連接?

目前,我有一個非常複雜的查詢連接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 
+3

您的查詢可能沒有問題,假設您有適當的索引。該鏈接非常具有誤導性。 – 2014-09-24 03:00:00

+0

更適合我們兄弟的網站。 Codereview – 2014-09-24 03:00:14

+3

連接實際上是您可以在SQL Server上執行的更便宜的事情之一。結果記錄的數量可能會導致問題。 – 2014-09-24 03:00:44

回答

2

有幾種方法,以儘量減少(優化)表的連接數: -

  • 確保需要你想要什麼,哪些表。
  • 還要確保表格處於標準化形式。

包封物很少加入使用: -

  • 使用CTE
  • 使用臨時表
  • 查看

您可以找到有關CTE和鏈接 細節的臨時表Common Table ExpressionView。 對於臨時表,只需在表名前添加「#」,並從連接中插入所需的數據,然後在同一會話中使用它。