[英]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
它可能會影響查詢性能嗎?
還訂購何處條件?
喜歡
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查詢在運行時會經歷三個階段:
作為優化的結果,編寫查詢的方式通常對性能的影響比您想象的要小。 很多人都在努力尋找優化查詢的最佳方法,這很辛苦-可能還有很多您甚至不知道的事情(例如不同的聯接算法,聯接順序,下推表達式求值等等) )。
對於您的示例,SQL Server優化器應產生相同的執行計划。 引擎足夠聰明,可以意識到它們確實在做同樣的事情。
注意:並非所有查詢引擎都適用。 有些優化器的性能很差,性能會有差異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.