2013-07-30 54 views
1

高差我有兩個表最好的方式與基數

select col1 , col2 , col3, col4, ........, col20 from ftcm; --TABLE has 470708 ROWS 

select val from cspm where product='MARK'; --TABLE has 1 ROW 

我必須做出col3作爲null如果col2=val

想到加盟爲

select 
    col1 , col2 , decode(col2,val,NULL,col3) col3 , col4, ........, col20 
    from ftcm a left outer join (select val from cspm where product='MARK') b 
    on a.col2=b.val; 

,但它似乎是時間採取 請告知,如果沒有得到它的最好辦法調整任何其他方式。

+0

是你正確的表索引之前,你的DBA諮詢? – Barranka

+0

是對產品 – shashwat

+0

COL1 表CSPM Barranka 表ftcm這將是很難判斷W/O'解釋plan'和表/索引的知識...等 一個很小的尖,我想,使用'CASE '可能會給你比'DECODE'更好的表現。 –

回答

1

我沒有測試此查詢,但如果你知道,從CSPM記錄是隻返回一個值,那麼你或許可以嘗試以下查詢: -

select col1, col2, decode(col2,(select val from cspm where product='MARK'),NULL,col3) col3, col4 ... col20 from ftcm 

因爲你正在做外連接時,以上可能會產生一個等效的輸出。

,你可以探索另一種選擇是使用並行提示

select /*+ parallel(em,4) */ col1, col2, decode(col2,(select val from cspm where product='MARK'),NULL,col3) col3, col4 ... col20 from ftcm em 

然而,使用並行提示在指定的程度(4)

+0

+1標量子查詢高速緩存,這應該是關於儘可能快。 –

+0

謝謝最大 以下查詢 – shashwat

+0

感謝最大 與您的查詢 「select col1,col2,decode(col2,(從cspm where product ='MARK'選擇val),NULL,col3)col3,col4 ... col20 from ftcm「 成本從6434減少到439日Thnx 我只是需要這個查詢的加盟是導致額外費用 我也觀察到磨片我試圖創建相同的查詢,我沒加括號之前,」從哪裏CSPM產品選擇VAL這就造成了丟失的表達錯誤=「MARK」」 因此懷疑使用查詢的內部解碼 感謝啓發 – shashwat