理論上,爲什麼內部連接的工作速度顯着快於左外部連接,因爲兩個查詢都返回相同的結果集。我有一個需要很長時間來描述的查詢,但這是我看到更改單連接:左外部連接 - 6秒,內部連接 - 0秒(查詢的其餘部分是相同的)。結果集:同SQL Server速度:左外部連接vs內部連接
回答
其實根據數據,左外連接和內部連接不會返回相同的results..most可能左外連接將有更多的結果,並再次依賴於數據..
我不確定這是答案而不是評論。雖然在右表沒有匹配行的情況下,左連接可能會返回更多結果,但OP明確指出,在他的情況下,兩個* do *會生成相同的行。這可能是由於查詢格式不正確(例如,連接/過濾條件不在正確的位置),但可能是左表沒有右表中沒有匹配的行。 – 2012-04-16 14:43:19
如果我將左連接更改爲內連接,結果並不相同,我會擔心的。我會懷疑你在where子句中的表左邊有一個條件(可能不正確)把它變成一個內部連接。
喜歡的東西:
select *
from table1 t1
left join table2 t2 on t1.myid = t2.myid
where t2.somefield = 'something'
這是不一樣的東西
select *
from table1 t1
left join table2 t2
on t1.myid = t2.myid and t2.somefield = 'something'
所以第一我會擔心我的查詢是不正確的開始,那麼我會擔心性能。內部連接是不是左側連接的性能增強,它們表示兩個不同的結果,並且應該返回不同的結果,除非您有一個表,每個記錄總是會有匹配。在這種情況下,您更改爲內部聯接,因爲另一個不正確不會提高性能。
關於左連接花費更長時間的原因,我最好的猜測是它連接到更多的行,然後通過where子句過濾出來。但這只是一個瘋狂的猜測。要知道你需要看執行計劃。
總的來說,我同意,但公平地說,我已經用'LEFT OUTER JOIN'構建了查詢,儘管今天的數據很容易適合'INNER JOIN' - 今天的結果並不一定是結果總是如此,可能會有後續引入的不匹配行(或過去存在的行)。所以如果內外連接今天產生相同的結果,我不會傾向於大聲地敲響警鐘。執行計劃不同的事實使我相信兩個查詢之間的差異比聯接關鍵字更多。 – 2012-04-16 15:10:12
- 1. SQL內部vs左連接問題
- 2. Oracle SQL左外部連接
- 3. 左外部連接sql 2012
- 4. 這是左連接還是右連接,內部還是外部?
- 5. SQL Server的內部連接
- 6. SQL Server內部連接
- 7. SQL SERVER(ON內部連接)
- 8. 左外連接在SQL Server
- 9. 內部連接和常規表格的外部左連接
- 10. MySQL左外部連接或內部連接
- 11. SQL Server 2012 - 左連接與哪裏vs內連接
- 12. Oracle和左外部連接
- 13. LINQ Lambda左連接與內部連接
- 14. SQL左外連接vs內連接不等於
- 15. SQL外部連接?
- 16. 左外部連接問題
- 17. Linq左外部連接C#
- 18. 左外部連接3表
- 19. 左連接上的內部連接使左連接表現爲內連接
- 20. 左外部sql連接問題
- 21. SQL替代左外部連接
- 22. Oracle SQL查詢(左外部連接)
- 23. 混合SQL內部和外部連接
- 24. SQL條件連接(內部或外部)
- 25. 的Django ForeignKey的與空=真,內部連接和左外連接
- 26. 比較內部連接和外部連接SQL語句
- 27. 內部連接,並外部聯接
- 28. 內部連接的內部連接?
- 29. SQL內部連接部門
- 30. LINQ到SQL外部左連接與多個連接條件
你比較了執行計劃嗎?如果你問一個模糊的問題,我希望你不要期待非常具體的結果。 – 2012-04-16 14:25:48
如果您獲得預期的結果,您應該做的第一件事是確保您的統計信息(和索引)是最新的。 – 2012-04-16 14:34:55
@Aaron Bertrand是的,抱歉不能提供細節。執行計劃看起來不同,但我沒有很好地閱讀。無論如何,我只是想,也許這是有一般原因... – ren 2012-04-16 15:05:17