我想知道什麼是更好的性能明智: 將條件放入JOIN? (x JOIN y on x.hi = y.hi AND ....)或者可能將它放在WHERE之下,並且僅在交叉條件下離開JOIN。SQL Query JOIN性能
感謝鄉親
我想知道什麼是更好的性能明智: 將條件放入JOIN? (x JOIN y on x.hi = y.hi AND ....)或者可能將它放在WHERE之下,並且僅在交叉條件下離開JOIN。SQL Query JOIN性能
感謝鄉親
這將取決於查詢優化引擎,以及它如何打破查詢分解成其邏輯的查詢操作。
使用MS SQL Server,您可以查看執行計劃,但通常情況下沒有差別,因爲優化程序會將兩種方式視爲等同。
在StackOverflow here上有類似的問題。
這很大程度上只是您喜歡哪種語法的問題。我的理解是SQL優化器應該能夠評估它們,但性能差別不大。
對於某些數據庫來說,它肯定會帶來性能差異。不幸的是,他沒有說他在用什麼。 – 2010-01-28 15:18:54
多年以前,我已經被Interbase燒掉了。 – 2010-01-28 16:40:09
你們都有很好的觀點......我的回答來自於暴露於Oracle和SQL Server – 2010-01-30 02:33:41
我不認爲要麼應該使性能差異(大多數數據庫可以優化這種事情),但如果您使用左連接,它們可以在結果中有所作爲。
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子句,而不是加入,變成左連接到內連接。
我的意思是假設結果是一樣的,哪一個更快? – Himberjack 2010-01-28 15:25:54
完全重複:HTTP://計算器.com/questions/1018822/inner-join-versus-where-clause-any-difference和關於'100'的其他問題。 – Quassnoi 2010-01-28 14:35:05