認識合併聯結
合併聯結需要在合併資料行上將兩項輸入都加以排序,這是由聯結述詞的相等 (ON) 子句來定義的。查詢最佳化工具通常會掃描索引 (如果適當的資料行集合建有索引的話),或在合併聯結下放置排序運算子。在極少的情況下,可以有多個相等子句,但只會從部份可用的相等子句中取得合併資料行。
因為每個輸入都經過排序,所以 Merge Join 運算子會從每個輸入各取得一列資料列,然後加以比較。例如,對於內部聯結作業,會傳回是否相等的資料列。如果不相等,就丟棄數值較小的資料列,再從該輸入取得另一個資料列。這個處理程序會一再重複,直到處理過所有資料列為止。
合併聯結作業可能是一般的,也可能是多對多的作業。多對多合併聯結會使用暫存資料表來儲存資料列。如果每個輸入有重複的值,在處理其他輸入的每個重複項時,必須將輸入之一倒回重複項的開始。
如果出現殘餘述詞的話,滿足合併述詞的所有資料列都會計算殘餘述詞,只有滿足的資料列才會傳回。
合併聯結本身非常快,但如果需要排序作業的話,有時候代價會很高。但如果資料量很大,而且可以從現有的 B-tree 索引取得已排序的預期資料,那麼合併聯結往往是可用的最快速聯結演算法。