使用位图索引和星形转换优化OLAP查询

在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进行全表扫描,以下是执行计划

bb
通常在事实表上的外键列上,值的离散度较低,适合建立位图索引。以下是建立位图索引语句:

点击(此处)折叠或打开

  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明显降低。
bb
注意到对事实表SALES_A的访问方式,由FULL变为了 BY USER ROWID。另外,执行计划中BITMAP CONVERSION表示星形转换起了作用。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22621861/viewspace-2083171/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22621861/viewspace-2083171/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值