Star query是一個事實表(fact table)和一些維度表(dimension)的join。每個維度表都跟事實表通過主外鍵join,且每個維度表之間不join。
星型模式設計的好處:
1) 提供了直接、直觀的業務實體與終端用戶schema設計的映射。 2) 對典型的star query提供了高性能的優化。 3) 通過大量的商業智能工具的廣泛支持,可能會期望甚至要求數據倉庫架構包含維度表。 |
星型模式是用於簡單的數據集市和大型數據倉庫。 |
|
雪花狀模式(snowflake schema):
Snowflake schema是star 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代替與表customer的bitmap 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是串行事務的一部分 |