Sql-Server

連接是否在執行時針對 where 子句進行了優化?

  • May 8, 2020

當我寫這樣的查詢時……

select *
from table1 t1
join table2 t2
on t1.id = t2.id

SQL 優化器是否不確定這是否是正確的術語,是否將其轉換為…

select *
from table1 t1, table2 t2
where t1.id = t2.id

本質上,SQL Server 中的 Join 語句只是一種更簡單的 sql 編寫方式嗎?或者它實際上是在執行時使用的?

編輯:我幾乎總是並且幾乎總是會使用 Join 語法。我只是好奇會發生什麼。

那些通常會在內部崩潰成相同的東西。前者是你應該經常寫的,恕我直言。更重要的是,它為什麼重要?它們在執行計劃和性能方面是相同的(假設你沒有把它搞砸,這更容易使用惰性的舊式語法)。

這是使用 AdventureWorks 的證明,證明沒有CROSS JOIN並且filter還在繼續。


顯式連接:

在此處輸入圖像描述


隱式連接:

在此處輸入圖像描述


看,媽!相同的計劃,相同的結果,在任何地方都看不到交叉連接或過濾器。

(為了清楚起見,在這兩種情況下對運算符的警告SELECT都是影響基數的隱式轉換,在任何一種情況下都與連接無關。)

引用自:https://dba.stackexchange.com/questions/35596