為什么我們需要連接倔叼?
我們規(guī)范化關(guān)系數(shù)據(jù)庫中的表汗唱,以避免不必要的信息重復(fù)。
我們使用join操作來重建原始元組而不會丟失任何信息丈攒。
不同算法的成本分析
image.png
下面一共會介紹5種連接算法哩罪。
分別是
- simple loop join
- block loop join
- index loop join
- sort-merge join
- hash join
simple loop join
image.png
image.png
block loop join
優(yōu)化1授霸,讀取整塊,2變各讀取整塊后际插,開始循環(huán)這2個整塊 然后JOIN碘耳。
image.png
image.png
利用全BUFFER 提速
我們假設(shè)有B個BUFFER, B-2個用來掃描外層表框弛。一個掃描內(nèi)層表辛辨,一個用來存儲OUTPUT。
image.png
image.png
利用INDEX提速
image.png
Assume the cost of each index probe is some
constant C per tuple.
Cost:
M + (m ? C)
Sort-Merge Join
分為2個階段瑟枫,
- 使用外排序算法對2個TABLE做排序
-
使用MERGE愉阎,找到MATCHING的元組
image.png
image.png
image.png
什么時候使用SORT-MERGE JOIN比較好?
當一個或者2個TABLE已經(jīng)按照JOIN KEY 排好序了力奋。
輸出必須要在JOIN KEY上排好序的榜旦。
Hash join
Hash Join 的思想就是2邊都按JOIN KEY 做HASH,那么JOIN KEY相等的肯定在一個HASH分塊里景殷。
image.png
image.png
image.png
image.png
總結(jié)
image.png