Oracle優化器:星型轉換(Star Query Transformation )
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' AND ch.channel_desc in ('Internet', 'Catalog') AND t.calendar_quarter_desc IN ('1999-01', '1999-02') GROUP BY ch.channel_class, c.cust_city, t.calendar_quarter_desc; |
|
星型轉換(a Bitmap Join Index)
--建一個bitmap join index CREATE BITMAP INDEX sales_c_state_bjix ON sales(customers.cust_state_province) FROM sales, customers WHERE sales.cust_id = customers.cust_id LOCAL NOLOGGING COMPUTE 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是序列事務的一部分 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27126919/viewspace-1688494/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料倉儲優化中什麼是星型轉換(Star Transformation)?優化ORM
- Star Transformation(星形轉換)ORM
- 小議星型轉換
- 優化星型查詢優化
- 星型轉換實現方法
- Native Query的自定義轉換器
- [轉載] Oracle優化器參考Oracle優化
- 數字轉型Digital Transformation簡介GitORM
- struts 型別轉換器型別
- oracle 資料型別轉換Oracle資料型別
- dataguard型別轉換與模式轉化型別模式
- oracle 的優化器Oracle優化
- 【摘】 oracle優化器Oracle優化
- Oracle的優化器Oracle優化
- Oracle Long型別轉換為Clob型別Oracle型別
- 從一條問題SQL優化看SQL TransformationSQL優化ORM
- Oracle 12CR2查詢轉換之星型轉換Oracle
- 【筆記】oracle 優化器筆記Oracle優化
- ORACLE優化器工作原理及及執行方式《轉》Oracle優化
- 製造業正在大力推動機器換人和智慧化轉型
- Mybatis實踐(一)型別轉換器MyBatis型別
- WPF 型別轉換器的實現型別
- PHP 型別轉換&&型別強制轉換PHP型別
- Oracle優化器(RBO與CBO)Oracle優化
- java型別轉換與強制型別轉換(轉)Java型別
- Parallel Query Tuning(並行化查詢優化)Parallel並行優化
- 最佳化星型查詢
- 將 SQL轉換成 Laravel Query Builder 程式碼SQLLaravelUI
- Oracle資料的優化器有兩種優化方法:Oracle優化
- 型別轉換型別
- Oracle 星型模式的調優Oracle模式
- Oracle隱式型別轉換導致索引失效Oracle型別索引
- 三星Galaxy A9 Star評測 三星A9 Star值不值得買?
- 利用Oracle 10g SQL優化器(STA)優化語句Oracle 10gSQL優化
- Mybatis使用小技巧-自定義型別轉換器MyBatis型別
- JS直譯器之自動型別轉換:[]==![]JS型別
- 從Java的型別轉換看MySQL和Oracle中的隱式轉換(二)Java型別MySqlOracle
- Oracle JAVA變數型別與欄位型別不一致,分割槽表全掃(INTERNAL_FUNCTION隱含轉換)的優化OracleJava變數型別Function優化