1. 程式人生 > >Oracle優化器:星型轉換(Star Query Transformation )

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

CREATEINDEX sales_c_state_bjix ON sales(customers.cust_state_province)

FROM sales, customers

WHERE sales.cust_id = customers.cust_id

LOCALCOMPUTE<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是序列事務的一部分