使用mapjoin效率對比

2021-06-02 16:58:37 字數 896 閱讀 2123

mapjion會把小表全部讀入記憶體中,在map階段直接拿另外乙個表的資料和記憶體中表資料做匹配,由於在map是進行了join操作,省去了reduce執行的效率也會高很多

使用乙個表測試,該錶時5分鐘表,資料很少,大概60多w。

測試日誌裡包含多個字段,其中有uid和uip。測試場景為給出2個uid,取uid共同的uip。

三個不同uid

select /*+ mapjoin(c) */

distinct  c.ip from

(select /*+ mapjoin(a) */

a.ip from 

(select ip from t where uid=uid1) a 

join

(select ip from t  where uid=uid2) b

on a.ip=b.ip 

) cjoin

(select ip from t where uid=uid3) d

on c.ip=d.ip

耗時 79.915 seconds  用4個mr

不適用mapjoin

select

distinct  c.ip from

(select

a.ip from 

(select ip from t where uid=uid1) a 

join

(select ip from t  where uid=uid2) b

on a.ip=b.ip 

) cjoin

(select ip from t where uid=uid3) d

on c.ip=d.ip

4個mr 耗時:90.932 seconds

結果一致.

效率提高了12%

union in 效率對比

對於索引列來最好使用union all,因複雜的查詢 包含運算等 將使or in放棄索引而全表掃瞄,除非你能確定or in會使用索引 對於只有非索引字段來說你就老老實實的用or 或者in,因為 非索引字段本來要全表掃瞄而union all 只成倍增加表掃瞄的次數 對於既有索引字段 索引字段有效 又包...

Remoting VS WCF 傳輸效率對比

1 測試平台 cpu intel core tm 2 duo cpu e8300 2.83ghz 記憶體 1.98g記憶體 平台 windows 2003 service 2 測試內容 測試int,stream,dataset,class在remoting和wcf下的傳輸效率 服務宿主 window...

windows檔案讀取效率對比

readfile1.cpp是使用記憶體對映檔案讀取檔案,readfile2.cpp是普通readfile readfile1.cpp char buf 10001 const char env getenv data dir char wsp 255 sprintf wsp,s demo.dbf e...