理解SAP BW 中的 Bit-Map Indexing
SAP BW 中一般的分析報表都是基於資訊立方體的。資訊立方體的事實錶針對各個維度都有一個預設的索引,但是不同的維度的索引型別可能是不同的:大部分維度使用的都是Bit-Map索引, 這種索引對於低Cardinality的資料效率特別高。而對於高Cardinality的資料,Bit-Map的效率會大大降低,有時候索引甚至比資料更大。這個時候我們就要選擇 Line Item 維度 或者High Cardinality 維度, 他們使用的是B-Tree索引。
Cardinality=(一列中相異值的數目)/(表的總記錄數)
比如下面這張簡單的表
X Y
1 100
2 200
3 100
4 300
5 200
X列的Cardinality是1,而Y列的是3/5=0.6
那麼這種索引對於低Cardinality的資料是如何實現高效率的呢?
建立BitMap索引
Bitmap索引首先會將表列的值轉化為布林值儲存:1代表真,0代表假。
以下表為例:
X Y Z
1 100 FOO
2 200 BOO
3 100 BOO
4 300 ZOO
5 200 FOO
表中X為主鍵,Y, Z為非主鍵。所以我們可以為Y和Z列建立Bitmap索引。為了給Y列建立索引,首先我們要找到Y列的所有可能值:
Y
100
200
300
然後你問自己,對於100來說,從第一行開始知道最後一行,它是否存在於Y列,是就是1,否就是0. 這樣你可以得到一個布林數列,這個數列的位數等於表的記錄數:
100: 1 0 1 0 0
或者這麼看
X Y Z Y(100)
1 100 FOO 1
2 200 BOO 0
3 100 BOO 1
4 300 ZOO 0
5 200 FOO 0
以此類推我們可以建立Y列的Bitmap索引:
X Y Z Y(100) Y(200) Y(300)
1 100 FOO 1 0 0
2 200 BOO 0 1 0
3 100 BOO 1 0 0
4 300 ZOO 0 0 1
5 200 FOO 0 1 0
即:
Y Bitmap
100 10100
200 01001
300 00010
同理可得Z的索引:
Z Bitmap
FOO 10001
BOO 01100
ZOO 00010
以上是Bitmap索引的生成原理。那麼查詢是怎麼工作在Bitmap索引上面,Bitmap索引是如何提高查詢的效能的呢?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/119153/viewspace-626080/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 啤酒釀造公司通過SAP BW on HANA解決報表難題TV
- 如何在Oracle表中選擇主鍵列BWOracle
- [20221111]CBO and Partial indexing.txtIndex
- Indexing, Selecting & Assigning(pandas學習二)Index
- 德布魯因序列與indexing 1Index
- DRUID: kafka-indexing-service如何使用UIKafkaIndex
- 檢視BW執行狀態
- 如何理解 SAP UI5 的 sap.ui.define 函式UI函式
- 理解 JavaScript 中的 thisJavaScript
- 理解JS中的thisJS
- 解決無法連線SQL Server資料庫的方法BWSQLServer資料庫
- SAP Spartacus 中的 Commands and queries
- SAP Fiori @OData.publish 註解的工作原理解析
- pytorch中forward的理解PyTorchForward
- Vue中mixin的理解Vue
- Vue中$nextTick的理解Vue
- 理解 CSS 中的 BFCCSS
- React中JSX的理解ReactJS
- 理解 JavaScript 中的原型JavaScript原型
- webstorm 底部一直在閃爍顯示indexingWebORMIndex
- SAP 電商雲 Spartacus UI SiteContextParamsService 的實現原理解析UIContext
- SAP CRM WebClient UI的on_new_focus應該怎麼理解WebclientUI
- SAP Spartacus 中的 HTTP URL parametersHTTP
- SAP HANA 中的 SLT 簡介
- SAP 中的批次管理詳解
- MySQL 中的事務理解MySql
- 程式中,對鎖的理解
- 理解 Swift 中的 @inlinable (譯)Swift
- mysql中BTree索引的理解MySql索引
- 理解C#中的ValueTaskC#
- Python中__init__的理解Python
- 理解C#中的ConfigureAwaitC#AI
- JS中this的深入理解JS
- 深入理解Js中的thisJS
- 對Innodb中MVCC的理解MVC
- 理解 JavaScript 中的閉包JavaScript
- 理解 JavaScript 中的作用域JavaScript
- [譯] 理解 JavaScript 中的 undefinedJavaScriptUndefined
- 理解 JavaScript 中的迴圈JavaScript