散列連接和合並連接之間的性能增益/損失是什麼,特別是在Oracle RDBMS中?散列連接和合並連接(Oracle RDBMS)有什麼區別?
回答
通過按照連接鍵對要連接的兩個數據集進行排序然後將它們合併在一起來執行「排序合併」連接。合併非常便宜,但排序可能非常昂貴,特別是如果排序溢出到磁盤。如果其中一個數據集可以通過索引以排序順序訪問,則可以降低排序的成本,但與全表掃描相比,通過索引掃描訪問大部分表的塊也可能非常昂貴。
哈希連接是通過將一個數據集散列到基於連接列的內存中執行的,並讀取另一個數據集並探查哈希表中的匹配項來執行的。當散列表可以完全保存在內存中時,散列連接的成本非常低,總成本僅比讀取數據集的成本高很多。如果哈希表必須以單遍方式分散到磁盤上,那麼成本會上升,而對於多通道分類而言,成本會大幅上升。
散列連接的代價可以通過對連接鍵上的兩個表進行分區來減少。這允許優化器推斷來自一個表中的分區的行將僅在另一個表的特定分區中找到匹配,並且對於具有n個分區的表而言,散列連接被執行爲n個獨立的散列連接。這具有以下效果:
- 每個散列表的大小減小,因此降低了所需的存儲器的最大量的和潛在除去必要操作,以要求臨時磁盤空間。
- 對於並行查詢操作,大量減少進程間消息傳遞量,從而減少CPU使用量並提高性能,因爲每個散列連接可由一對PQ進程執行。
- 對於非並行查詢操作,內存需求減少了n倍,第一行從查詢中更早地進行投影。
您應該注意,散列連接只能用於equi連接,但合併連接更加靈活。
一般來說,如果你加入大量的數據加入equi-join,那麼哈希連接將是一個更好的選擇。
該主題在文檔中有很好的介紹。
http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i51523
我只是想編輯這個後代,當我回答這個問題時,oracle的標籤沒有添加。我的迴應更適用於MS SQL。
合併連接是最好的,因爲它利用了排序,導致表單單向傳遞進行連接。如果您有兩個表(或覆蓋索引),它們的排序順序相同,例如主鍵和該鍵上的表的索引,則執行該操作時會導致合併連接。
哈希連接是次佳選擇,因爲它通常是在一個表具有少量項目(相對)時完成的,因此它有效地爲每行創建一個臨時表,併爲每個行創建連接以創建連接。
最糟糕的情況是嵌套循環,它是order(n * m),這意味着沒有排序或大小可以利用,並且連接很簡單,對於表x中的每一行,搜索表y中的連接都要執行。
- 1. 範圍和連接有什麼區別?
- 2. ,和+連接時有什麼區別?
- 3. 反連接和反半連接有什麼區別?
- 4. 插座連接和動作連接有什麼區別?
- 5. SocketConnection與DCOM連接有什麼區別
- 6. 左外連接 - 有什麼區別?
- 7. 是什麼左邊的區別連接和MySQL中右連接
- 8. oracle中的內連接和equi連接有什麼區別,下列哪個查詢可以提供高性能?
- 9. Oracle會話和Oracle連接有什麼區別?或者兩者是一樣的..?
- 10. 套接字的連接和讀取超時有什麼區別?
- 11. NTFS連接點和符號鏈接有什麼區別?
- 12. MySQL中的套接字和端口連接有什麼區別?
- 13. IncomingMessage的「套接字」,「連接」和「connection.socket」有什麼區別?
- 14. Sql連接和OLEDB連接的區別
- 15. SQL Server 2008中嵌套循環連接和散列連接的區別
- 16. 通過級別連接和在oracle中進行連接之間的區別是什麼?
- 17. 內部連接和列連接之間的區別
- 18. 使用OLEDB和ODP.NET連接到Oracle數據庫有什麼區別?
- 19. 數組和散列有什麼區別?
- 20. 左連接(table1,table2)和左連接table1左連接表2有什麼區別2
- 21. 什麼是Oracle中的實例連接和服務連接?
- 22. Linq:在連接中==和equals有什麼區別?
- 23. 從DataSource getconnection()和Mysql會話連接有什麼區別?
- 24. PHP&mysqli:持久連接和交互有什麼區別?
- 25. Mysql的表連接中的「using」和「on」有什麼區別?
- 26. '前饋網絡'和'全連接網絡'有什麼區別?
- 27. pg_hba.conf中的「local」和「localhost」連接類型有什麼區別?
- 28. mysql中'where'和不同'連接'有什麼區別?
- 29. MySql連接器/ J中的autoReconnect和autoReconnectForPools有什麼區別?
- 30. 列連接以合併值
http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i76073 – 2009-07-10 20:21:10
http://www.orafaq.com/node/1446 – cagcowboy 2009-07-10 21:01:51