2012-03-30 254 views
2

我一直認爲,內部聯接執行比OUTER JOIN更好,但我已經經歷了幾起案件現在在哪裏這根本不是真的...OUTER JOIN VS INNER JOIN

有一天,我在創建用一系列INNER JOINS查詢。內連接適用於所有這些連接,因爲我只需要在所有連接的表中匹配的行。

我注意到性能非常差(運行查詢需要1分鐘)。奇怪的是,當我將它們中的一些切換到外部聯接時,查詢在幾秒鐘內完成...... 這不是熱身或緩存的情況,因爲我在兩次運行之間重新啓動了SQL服務器,並且性能讀數爲隨時間推移一致。

我在兩個不同的報告中遇到過這種情況,但共同的主題是通過切換到左加入來改進性能。我爲兩個報告製作了相同表格的開關。所有JOIN都在ON GUID列上完成

左JOIN給出了相同的行數,因爲所有ID都在JOINED表中匹配,所以可以切換,但我很好奇如果任何人有解釋。 對此有何建議?

該平臺是SQL Server 2008和所有外部連接被留JOINS

+3

這不是一個SQL問題,它是特定於供應商的問題。你應該指出你正在使用哪個DBMS(包括作爲標籤)。 – paxdiablo 2012-03-30 03:54:40

+0

更新了標籤 – TGH 2012-03-30 03:55:54

+0

不,這是一個與關係代數有關的SQL問題。供應商細節可能會影響性能,但是出現這種情況的原因是爲什麼OP的查詢在OUTER JOIN中執行得更好。 – 2012-03-30 03:55:59

回答

4

內加入快於左連接。

This answer應該給你一些提示。

+0

是的,我想這可能是其他因素干擾特定的查詢...我不是一個DBA,但我總是認爲OUTER比慢INNER :-) – TGH 2012-03-30 04:01:25