計算機三級數(shù)據(jù)庫輔導(dǎo):合并聯(lián)接算法

字號:

如果兩個聯(lián)接輸入并不小但已在二者聯(lián)接列上排序(例如,如果它們是通過掃描已排序的索引獲得的),則合并聯(lián)接是最快的聯(lián)接操作。如果兩個聯(lián)接輸入都很大,而且這兩個輸入的大小差不多,則預(yù)先排序的合并聯(lián)接提供的性能與哈希聯(lián)接相近。
    從上次我們分析來看,嵌套循環(huán)適合輸入和輸出都小的情況,那如果輸入和輸入都比較大情況下,使用合并算法什么情況下。
    使用:
    合并聯(lián)接本身的速度很快,但如果需要排序操作,選擇合并聯(lián)接就會非常費時。然而,如果數(shù)據(jù)量很大且能夠從現(xiàn)有 B 樹索引中獲得預(yù)排序的所需數(shù)據(jù),則合并聯(lián)接通常是最快的可用聯(lián)接算法。
    我們來測試一下,合并連接的情況:
    測試環(huán)境:表:workflowinfo1 約45萬條 表workflowbase1 約4.5萬條
    條件:workflowbase1中列id,creater都建立索引,workflowinfo1中workflowid建立了索引。
    如果兩個聯(lián)接輸入并不小但已在二者聯(lián)接列上排序(例如,如果它們是通過掃描已排序的索引獲得的),則合并聯(lián)接是最快的聯(lián)接操作。如果兩個聯(lián)接輸入都很大,而且這兩個輸入的大小差不多,則預(yù)先排序的合并聯(lián)接提供的性能與哈希聯(lián)接相近。~:(creater=4028814110830a1e01108fe379e60061’的workflowbase1表有1023條數(shù)據(jù))
    測試語句:
    合并算法
    select a.* from workflowbase1 a inner merge join dbo.workflowinfo1 b
    on a.id=b.workflowid and a.creater='4028814110830a1e01108fe379e60061'
    hash算法
    select a.* from workflowbase1 a inner hash join dbo.workflowinfo1 b
    on a.id=b.workflowid and a.creater='4028814110830a1e01108fe379e60061'
    注意:這兩條SQL和上一個嵌套循環(huán)的例子有區(qū)別,一個 select * 和一個是 select a.*