Sql-Server
ON 與 WHERE 的索引性能
我有兩張桌子
@T1 TABLE ( Id INT, Date DATETIME ) @T2 TABLE ( Id INT, Date DATETIME )
這些表在 (Id, Date) 上有一個非聚集索引
我加入這些桌子
SELECT * FROM T1 AS t1 INNER JOIN T2 AS t2 ON t1.Id = t2.Id WHERE t1.Date <= GETDATE() AND t2.Date <= GETDATE()
這也可以寫成
SELECT * FROM T1 AS t1 INNER JOIN T2 AS t2 ON t1.Id = t2.Id AND t1.Date <= GETDATE() AND t2.Date <= GETDATE()
我的問題是,這兩個查詢中哪一個提供了更好的性能,為什麼?或者他們是平等的?
性能將是相同的。優化器將辨識這一點並創建相同的計劃。
另一方面,我不會說他們是平等的。問題中的第一種形式更具可讀性並且通常是預期的。
例如,使用我手頭的一些表,您可以看到無論我如何編寫查詢,執行計劃都是完全相同的。
您應該能夠確定您自己的表和數據集的查詢計劃,這樣您就可以看到在您的情況下會發生什麼。
SELECT * FROM salestable , custtable WHERE salestable.custaccount = custtable.accountnum AND salestable.dataareaid = custtable.dataareaid SELECT * FROM salestable JOIN custtable ON salestable.custaccount = custtable.accountnum AND salestable.dataareaid = custtable.dataareaid SELECT * FROM salestable JOIN custtable ON salestable.custaccount = custtable.accountnum WHERE salestable.dataareaid = custtable.dataareaid
給出這些執行計劃