2010-01-28 113 views
3

我想知道什麼是更好的性能明智: 將條件放入JOIN? (x JOIN y on x.hi = y.hi AND ....)或者可能將它放在WHERE之下,並且僅在交叉條件下離開JOIN。SQL Query JOIN性能

感謝鄉親

+1

完全重複:HTTP://計算器.com/questions/1018822/inner-join-versus-where-clause-any-difference和關於'100'的其他問題。 – Quassnoi 2010-01-28 14:35:05

回答

2

這將取決於查詢優化引擎,以及它如何打破查詢分解成其邏輯的查詢操作。

使用MS SQL Server,您可以查看執行計劃,但通常情況下沒有差別,因爲優化程序會將兩種方式視爲等同。

1

在StackOverflow here上有類似的問題。

這很大程度上只是您喜歡哪種語法的問題。我的理解是SQL優化器應該能夠評估它們,但性能差別不大。

+0

對於某些數據庫來說,它肯定會帶來性能差異。不幸的是,他沒有說他在用什麼。 – 2010-01-28 15:18:54

+0

多年以前,我已經被Interbase燒掉了。 – 2010-01-28 16:40:09

+0

你們都有很好的觀點......我的回答來自於暴露於Oracle和SQL Server – 2010-01-30 02:33:41

0

我不認爲要麼應該使性能差異(大多數數據庫可以優化這種事情),但如果您使用左連接,它們可以在結果中有所作爲。

SELECT a.field1 
     , a.field2 
     , b.field3 
FROM table1 a 
LEFT JOIN table2 b 
    ON a.id = b.id 
WHERE a.field5 = 'test' 
     AND b.field3 = 1 

SELECT a.field1 
     , a.field2 
     , b.field3 
FROM table1 a 
LEFT JOIN table2 b 
    ON a.id = b.id AND b.field3 = 1 
WHERE a.field5 = 'test' 

這兩個查詢不返回相同的結果作爲第一個查詢,通過將條件where子句,而不是加入,變成左連接到內連接。

+0

我的意思是假設結果是一樣的,哪一個更快? – Himberjack 2010-01-28 15:25:54

0

那麼你can not使用*==* OUTER JOIN語法與SQL Server中的WHERE子句中2008 R2

我討厭看到一個查詢混合2款

+0

你甚至不應該在SQL Server 2000中使用它們,因爲它們有時可能會被誤解爲交叉連接。 – HLGEM 2010-01-28 21:10:25

+0

@HLGEM:我們當然知道,但現在我們有充分的理由來證明爲什麼我們說「不」 – gbn 2010-01-28 21:44:03

+1

錯誤的結果不足以作爲理由?當然是在這裏。 – HLGEM 2010-01-28 23:04:52