Oracle优化器:星型转换(Star Query Transformation )

Star query是一个事实表(fact table)和一些维度表(dimension)的join。每个维度表都跟事实表通过主外键join,且每个维度表之间不join


星型模式设计的好处:

1) 提供了直接、直观的业务实体与终端用户schema设计的映射。

2) 对典型的star query提供了高性能的优化。

3) 通过大量的商业智能工具的广泛支持,可能会期望甚至要求数据仓库架构包含维度表。

星型模式是用于简单的数据集市和大型数据仓库。

 


 

雪花状模式(snowflake schema):

Snowflake schemastar schema的一种,但更复杂。它的维度数据被分到多个表而不是一个大表。更多的维度表,更多的外键joins,使查询更复杂,查询性能下降。

Oracle建议使用star schema替代snowflake schema,除非你有别的原因。

 

 

优化Star Query

1) fact table的每个外键列上建立bitmap index

2) 初始化参数STAR_TRANSFORMATION_ENABLED 应被设为TRUE,默认false

星型转换(Star transformation)能为star query提供高效的查询性能。


 

 

 

合适的情况下,Oracle会自动选择star transformation技术,隐视重写star query SQL,提高star query效率。

 

星型查询2个基本步骤:

1) fact table中检索出必要的结果集。(bitmap index会提高效率)

2) 结果集与维度表joins

 

 

星型转换(bitmap index)

通过bitmap AND操作将3个维度表bitmaps为一个单独的bitmap,然后与fact table通过bitmap indexes逻辑JOIN

SELECT ch.channel_class,

       c.cust_city,

       t.calendar_quarter_desc,

       SUM(s.amount_sold) sales_amount

  FROM sales s, times t, customers c, channels ch

 WHERE s.time_id = t.time_id

   AND s.cust_id = c.cust_id

   AND s.channel_id = ch.channel_id

   AND c.cust_state_province = 'CA' BY ch.channel_class, c.cust_city, t.calendar_quarter_desc;


 

 

星型转换(a Bitmap Join Index)

--建一个bitmap join index

CREATE INDEX sales_c_state_bjix ON sales(customers.cust_state_province)

FROM sales, customers

WHERE sales.cust_id = customers.cust_id

LOCAL COMPUTE<span color:navy;background:white;"="" style="word-wrap: break-word; font-size: 10pt;"> STATISTICS;

即使用bitmap join index代替与表customerbitmap join

 

 

星型转换的限制

1、 下面的情况不支持星型转换

?  查询中使用hint

?  查询包含绑定变量

?  Fact table上的bitmap indexes太少

?  远程fact tables

?  Anti-joined tables

?  Fact table是一个unmerged view

?  Fact table是一个partitioned view

 

2、 优化器不选择star transformation的情况

?  表有一个好的单表访问路径

?  表太小不值得转换

 

3、临时表在下面情况下不适用star transformation

?  数据库read-only模式

?  Star query是串行事务的一部分


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值