日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747


干貨!機構內部數據庫教程,Join算法

JAVA技術小碼農

5月5日 · 優質科技領域創作者

Join操作是一種常見的數據庫操作,通過Join可以將多個表關聯起來,根據用戶的條件共同提供數據。一般情況,在數據庫中都會內置多種Join算法,優化器在優化的時候會根據SQL語句和表的統計信息選擇合適的算法。

Hash Join

Hash Join

在執行Hash Join時,1. 會根據Join條件將一張表進行Hash運算加載到內存中的一張Hash表中。Hash表類似與Java中的HashTable;2.遍歷另外一張表,進行Hash運算后在內存中查找滿足條件的記錄。

select * from t1 join t2 on t1.a = t2.b;在執行這個SQL的時候,先加載表t1的數據,然后根據表t1的a字段作為key構造Hash表。之后,從表t2中逐條取出記錄,計算字段b的Hash值,去Hash表中查找是否存在滿足條件的記錄。

Hash Join的性能很高,但是前提條件是內存中能夠存放下其中一張表的Hash表。所以一般適用于大小表Join。在一些大數據分析的數據查詢引擎中,當內存放不下這種Hash表的時候,會將小表進行分區保存到磁盤上,之后再執行Join。

嵌套循環Join

嵌套循環Join

嵌套循環Join中,至少一張表存在索引,且Join的條件是對索引列的比對。帶有索引的表作為被檢索表,對不帶有索引或者兩張都帶有索引的表中較小的那張表進行遍歷。這個算法充分利用了索引的優勢,讓Join的時間復雜度從O(m*n)變成了O(n),其中m為被檢索表的行數,n為遍歷表的行數。

Merge Hash

相對于上述兩個算法,這個算法的性能差些,但是使用范圍更廣些。在這個算法中,相對兩張表中的數據進行排序,之后再分別取一段進行Join。

Semi Join

半連接,對于左邊的表輸出滿足條件的記錄,而對于右邊的表則不管是否滿足條件都不會被輸出,也就是,最終的結果是左邊表數據記錄的一個子集,類似于in、exists。Semi Join本身就是Join的一種。在大數據跨數據源的查詢中,Semi Join是對inner join、left join、right join的一種優化。查詢跨數據源時,盡量減少從每個數據源出來的數據量是一種很有效的優化方式,畢竟網絡傳輸是要花費時間的。將Join轉化成Semi Join是一種有效減小數據量的方式。

對于:select * from t1 join t2 where t1.a = t2.b,Semi Join的過程如下:

1.將表t1的數據加載到內存;

2.根據t1的數據,改寫加載表t2的條件,即將SQL語句改寫成in、exists等。假設表t1中,全部記錄的a字段只有兩個值:aa和bb,那么SQL將被改寫為select * from t2 in ('aa','bb');

3.對從表t1和t2加載的數據做Join;

第2步中對加載t2數據的SQL的改寫,使原本需要加載整個t2表改為僅加載t2中滿足條件的數據。

最后福利

有人要問了,看的什么視頻?

私信我“Java”就能免費獲取視頻的領取方式了,還有更多Java資料,包括近一年面試的經歷,我都整理成了PDF,也花了我挺多時間,希望大家幫我轉發評論下!謝謝大家了!

干貨!機構內部數據庫教程,Join算法

分享到:
標簽:算法 Join
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定