Sql-Server
連接是否在執行時針對 where 子句進行了優化?
當我寫這樣的查詢時……
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
都是影響基數的隱式轉換,在任何一種情況下都與連接無關。)