使用點陣圖索引和星形轉換優化OLAP查詢

hooca發表於2016-04-18
在OLAP系統中,往往有一個事實表連線多個維度表的查詢,在以下案例中,sales是事實表,products/promotions/channels/countries是維度表。
通常在事實表上的連線列建立外來鍵,連上維度表的主鍵。

見以下SQL語句:

點選(此處)摺疊或開啟

  1. select s.prod_id,s.cust_id,s.time_id,s.channel_id
  2. from sales_A s, products pd, promotions pm, channels ch, countries c
    where s.prod_id = pd.prod_id
      and s.promo_id = pm.promo_id
      and s.channel_id = ch.channel_id
      and s.tax_country = c.country_iso_code;
如果沒有任何優化設計,將對事實表sales_A進行全表掃描,以下是執行計劃

使用點陣圖索引和星形轉換優化OLAP查詢
通常在事實表上的外來鍵列上,值的離散度較低,適合建立點陣圖索引。以下是建立點陣圖索引語句:

點選(此處)摺疊或開啟

  1. create bitmap index sales_A_prod_bix on
  2.   sales_A ( prod_id );
  3. create bitmap index sales_A_promo_bix on
      sales_A ( promo_id );

    create bitmap index sales_A_channel_bix on
      sales_A ( channel_id );
    create bitmap index SALES_COUNTRY_BIX on
      sales_A ( TAX_COUNTRY );

如果僅僅是到這裡,執行計劃依然同上,新建的點陣圖索引未被採用。

我們需要啟用“星形轉換”。
星形轉換是否啟用由引數star_transformation_enabled決定,預設是FALSE。

點選(此處)摺疊或開啟

  1. alter system set star_transformation_enabled=TRUE;
然後檢視執行計劃,可以看到COST明顯降低。
使用點陣圖索引和星形轉換優化OLAP查詢
注意到對事實表SALES_A的訪問方式,由FULL變為了BY USER ROWID。另外,執行計劃中BITMAP CONVERSION表示星形轉換起了作用。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22621861/viewspace-2083171/,如需轉載,請註明出處,否則將追究法律責任。

相關文章