Join

DB2 中有關嵌套循環連接的表順序

  • June 29, 2012

首先,我想在 Join Query 中引用現有的 post Table order

所以作者是說表格順序並沒有使事情(結果,訪問計劃)不同。關於訪問計劃,我對此表示懷疑。

所以DB2的文件(TABLE JOIN)在NLJoin中告訴,外表是固定的,只掃描一次,而內表可能會被掃描多次取決於不同的場景,在這種情況下,我認為連接中表的順序真的很重要,我們需要將大表作為外部表,因為我們只想掃描一次。

是這樣嗎,這僅適用於 DB2 嗎?我錯過了什麼?

+寫SQL的時候有沒有一般的指導,我們應該如何處理表連接命令?

對於嵌套循環連接,您是對的,選擇哪個表是內部表和哪個外部表對性能很重要。

但是,文件中沒有任何內容,在您提供的連結中,這意味著對於具有 的查詢,當選擇嵌套循環連接算法時a INNER JOIN b,該表a將用作內部表和外部表。b

任何體面的優化器都會評估許多不同的算法組合、表的放置和執行順序,所以我認為如果你寫a INNER JOIN bor沒有任何區別b INNER JOIN a,在這兩種情況下選擇的執行計劃應該是相同的。如果有例外,我希望它們適用於具有數十個連接表和/或多個分組的非常複雜的查詢。

測試和檢查實際的執行計劃是確認這一點的一種方法。另一個是分析查詢優化器的原始碼。


編寫 SQL(在任何 DBMS 中)時的一般指導是根本不關心表連接順序。SQL 程式碼描述了你想要的結果,它沒有告訴 DBMS 如何得到它。現在很多優化器在大多數時候都比我們大多數人更聰明、更快地選擇最佳執行計劃。

除非文件顯示優化器是幼稚的或處於非常早期的版本以及編寫查詢的方式,否則會真正影響所選的執行計劃。

或者特定查詢的測試/執行表明它很慢並且沒有選擇一些明顯好的計劃。然後您可以嘗試使用提示(如果 DBMS 具有此類功能),嘗試以不同方式重寫查詢,檢查統計資訊是否更新等。

嗯,您首先強調的問題實際上是針對 SQLServer 的,因此 DB2 可能使用不同的算法來確定連接順序、連接類型和優化計劃。

您在 DB2 上找到的文件是正確的。我還將查看有關選擇最佳連接的策略的連結。儘管這是針對較舊版本的 DB2,但我發現這篇文章對於理解 DB2 如何/何時選擇要使用的連接以及影響其選擇的因素非常有幫助。

引用自:https://dba.stackexchange.com/questions/19922