在OLAP系统中,往往有一个事实表连接多个维度表的查询,在以下案例中,sales是事实表,products/promotions/channels/countries是维度表。
通常在事实表上的连接列建立外键,连上维度表的主键。
见以下SQL语句:
如果没有任何优化设计,将对事实表sales_A进行全表扫描,以下是执行计划
通常在事实表上的外键列上,值的离散度较低,适合建立位图索引。以下是建立位图索引语句:
如果仅仅是到这里,执行计划依然同上,新建的位图索引未被采用。
我们需要启用“星形转换”。
星形转换是否启用由参数star_transformation_enabled决定,默认是FALSE。
然后查看执行计划,可以看到COST明显降低。
注意到对事实表SALES_A的访问方式,由FULL变为了 BY USER ROWID。另外,执行计划中BITMAP CONVERSION表示星形转换起了作用。
通常在事实表上的连接列建立外键,连上维度表的主键。
见以下SQL语句:
点击(此处)折叠或打开
- select s.prod_id,s.cust_id,s.time_id,s.channel_id
- 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;
![bb](http://img.blog.itpub.net/blog/attachment/201604/18/22621861_1460946662SXco.png?x-oss-process=style/bb)
通常在事实表上的外键列上,值的离散度较低,适合建立位图索引。以下是建立位图索引语句:
点击(此处)折叠或打开
- create bitmap index sales_A_prod_bix on
- sales_A ( prod_id );
-
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。
点击(此处)折叠或打开
- alter system set star_transformation_enabled=TRUE;
![bb](http://img.blog.itpub.net/blog/attachment/201604/18/22621861_1460947641N7n2.png?x-oss-process=style/bb)
注意到对事实表SALES_A的访问方式,由FULL变为了 BY USER ROWID。另外,执行计划中BITMAP CONVERSION表示星形转换起了作用。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22621861/viewspace-2083171/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22621861/viewspace-2083171/