ITPub博客

首页 > 数据库 > Oracle > 使用位图索引和星形转换优化OLAP查询

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

原创 Oracle 作者:hooca 时间:2016-04-18 10:49:18 0 删除 编辑
在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进行全表扫描,以下是执行计划


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

点击(此处)折叠或打开

  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明显降低。

注意到对事实表SALES_A的访问方式,由FULL变为了BY USER ROWID。另外,执行计划中BITMAP CONVERSION表示星形转换起了作用。

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

请登录后发表评论 登录
全部评论

注册时间:2009-09-29

  • 博文量
    215
  • 访问量
    403043