2011-01-30 18 views

回答

8

它將依賴於DBMS,並且在某種程度上依賴於所加入的表,並且差異通常不會被測量。使用INNER JOIN,將會有兩個公共列的副本;使用NATURAL JOIN,將只有一個公共列的副本。

如果必須將中間結果寫入磁盤或進行排序,則會有更多要管理的數據,並且通過客戶端 - 服務器連接返回客戶端的數據會稍多一些,因此INNER JOIN可能會比NATURAL JOIN略長一些。如果公共列足夠大 - 例如長字符字段 - 這種大小差異可能會很大。

準備兩種類型的連接的時間差異是完全可以忽略的。兩者都必須讀取參與連接的兩個表中的所有列的信息,並且處理該數據的過程基本相似。

在執行過程中,複製數據以形成中間結果對於NATURAL JOIN可能稍微複雜一點 - 因爲您不僅僅需要獲取每一行的副本 - 但是您不一定需要完整副本INNER JOIN的每一行也是如此,所以差異可以忽略不計。而且,與之前一樣,NATURAL JOIN的數據總體上要複製的數據略少,所以還有一點小優勢。

因此,總體而言,NATURAL JOIN可能比INNER JOIN稍快,但差異仍可能可以忽略不計。

+0

以及更重要的一點,它們的區別與查看錶結構信息無關。 – siride 2011-01-30 06:44:47

1

在特殊情況下,自然連接可以像內連接一樣快。

2

我無法想象找到可以支持該假設的公共列是非常昂貴的。

+0

更可能取決於設計中的自然連接不需要鍵(稱爲「索引」)。雖然你可以做沒有真正的密鑰的內部連接,但它非常罕見和「明顯」錯誤 – stefan 2011-01-30 08:28:47