簡體   English   中英

操作順序SQL Server中的內部聯接和Where子句性能?

[英]Order of operation Inner Join and Where clause performance in SQL Server?

在按錯過順序使用操作時是否存在任何性能問題?

如圖1。所有內部成員先加入,然后所有條件加入。

    select * from
    t1
    inner join t2 on t1.t2Id = t2.Id
    inner join t3 on t1.t3Id = t3.Id
    inner join t4 on t2.t4Id = t4.Id
    where 
    t1.Id in (1,2,3,4,5)
    and t2.Id in (1,2,3,4,5,6,7)
    and t3.Name like '%a' 

2.所有表分別帶有“何處”和“內部”聯接

 select * from
    (select * from t1 where t1.Id in (1,2,3,4,5)) a
    inner join (select * from t2 where t2.Id in (1,2,3,4,5,6,7)) a1 on a.t2Id = 
    a.Id
    inner join (select * from t3 where t3.Name like '%a') a2 on a.t3Id = a2.Id
    inner join t4 on a1.t4Id = t4.Id

它可能會影響查詢性能嗎?

  1. 還訂購何處條件?

    喜歡

     select * from t1 inner join t2 on t1.t2Id = t2.Id where t1.t2Id in (1,2,3,4,5,6) and t2.t3Id in (1,2,3,4,5) 

SQL查詢在運行時會經歷三個階段:

  1. 解析查詢(並查找各種引用)。
  2. 創建執行計划,並根據查詢需要完成的內容進行優化。
  3. 查詢計划正在執行。

作為優化的結果,編寫查詢的方式通常對性能的影響比您想象的要小。 很多人都在努力尋找優化查詢的最佳方法,這很辛苦-可能還有很多您甚至不知道的事情(例如不同的聯接算法,聯接順序,下推表達式求值等等) )。

對於您的示例,SQL Server優化器應產生相同的執行計划。 引擎足夠聰明,可以意識到它們確實在做同樣的事情。

注意:並非所有查詢引擎都適用。 有些優化器的性能很差,性能會有差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM