點陣圖索引(bitmap-index)
點陣圖索引(bitmap-index)
點陣圖索引概念
點陣圖索引適合於(low cardinality)的情況,即column中只有很少部分的值是不同的。點陣圖索引類似一個二維的陣列,列代表的是column不同的取值,行代表某條記錄的取值。1所在的位置表示某條記錄在該列取什麼值。如下圖:
create bitmap index person_region on person (region);
Row Region North East West South
1 North 1 0 0 0
2 East 0 1 0 0
3 West 0 0 1 0
4 West 0 0 1 0
5 South 0 0 0 1
6 North 1 0 0 0
Row Region North East West South
1 North 1 0 0 0
2 East 0 1 0 0
3 West 0 0 1 0
4 West 0 0 1 0
5 South 0 0 0 1
6 North 1 0 0 0
row1 在region 列的值是North,所以在點陣圖中North列的位置是1.
點陣圖索引的使用注意事項
點陣圖索引對使用複合條件(and,or)的查詢語句非常有用。因為點陣圖可以很方便的進行這些運算。點陣圖索引所帶來的查詢效能上的優勢會被DML操作效能的降低所抵消(修改點陣圖索引所花費的開銷要比平衡樹索引大),所以點陣圖索引更適合DML操作比較少的OLAP(資料倉儲)環境下。而且在高DML的環境下點陣圖索引很容易引起死鎖。
另外點陣圖索引具有高可壓縮的結構,這樣讀取點陣圖索引的速度為非常的快,但是卻需要更多的CPU資源來解壓縮點陣圖索引,所有需要在IO開銷,CPU開銷,儲存開銷方面做出選擇或者平衡。
模擬bitmap index 環境下死鎖的出現
session 1
SQL> select sid from V$mystat where rownum = 1;
SID
----------
1
SQL> create table test_bitmap
2 (field varchar2(5));
Table created.
SQL> create bitmap index test_bitmap_idx on test_bitmap(field);
Index created.
SQL> insert into test_bitmap
2 values ('F');
1 row created.
session 2
SQL> select sid from V$mystat where rownum = 1;
SID
----------
30
SQL> insert into test_bitmap
2 values('T');
1 row created.
SQL> insert into test_bitmap
2 values('F');
#執行完這些語句後,去session 1執行 另外一條insert語句。
insert into test_bitmap
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource
session 1
SQL> insert into test_bitmap
2 values('T');
^Cinsert into test_bitmap
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
該insert 語句會一直等待,所以我取消了。
session1 插入記錄以後點陣圖如下,同時session1 鎖定了bit-map index中的F值列。
row field F
1 F 1
session2 第一次插入記錄以後點陣圖如下,同時session2 鎖定了bit-map index中的T值列。
row field F T
1 F 1 0
2 T 0 1
session2 第二次插入記錄以後理想情況下點陣圖是下面這樣子的,但是因為session1 鎖住了bit-map index中的F值列,所以session 2 卡在那邊,一直在waiting。。。。請求session1 的鎖。
row field F T
1 F 1 0
2 T 0 1
3 F 1 0
現在在session1 中發出的語句請求session 2的鎖。這時候資源請求的迴圈鏈構成了,出現死鎖oracle 探測到並報錯。
row field F T
1 F 1 0
2 T 0 1
3 F 1 0
4 T 0 1
注:紅色部分實際上並不存在於點陣圖索引中,是為了說明理想情況下應該存在而引入的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-720662/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle索引——點陣圖索引Oracle索引
- 點陣圖索引(Bitmap Index)——從B*樹索引到點陣圖索引索引Index
- 點陣圖索引.sql索引SQL
- 點陣圖索引(Bitmap Index)——索引共用索引Index
- 點陣圖索引(Bitmap Index)——點陣圖索引與資料DML鎖定索引Index
- Oracle-點陣圖索引Oracle索引
- 【基礎知識】索引--點陣圖索引索引
- oracle 點陣圖索引(bitmap index)Oracle索引Index
- 點陣圖索引:原理(BitMap index)索引Index
- 【點陣圖索引】在點陣圖索引列上進行更新操作的鎖代價研究索引
- Python點陣圖索引學習Python索引
- 點陣圖索引的工作原理 - Richard索引
- bitmap index點陣圖索引系列(一)Index索引
- B樹索引和點陣圖索引的結構介紹索引
- 【索引】Bitmap點陣圖索引與普通的B-Tree索引鎖的比較索引
- oracle點陣圖索引對DML操作的影響Oracle索引
- 關於ORACLE點陣圖索引內部淺論Oracle索引
- zt_深入理解bitmap index點陣圖索引Index索引
- 使用點陣圖連線索引優化OLAP查詢索引優化
- B-Tree索引與Bitmap點陣圖索引的鎖代價比較研究索引
- 使用點陣圖連線索引最佳化OLAP查詢索引
- 點陣圖
- MySQL點陣圖索引解決使用者畫像問題MySql索引
- 使用點陣圖索引和星形轉換優化OLAP查詢索引優化
- 使用點陣圖選單項——建立點陣圖 (轉)
- 【Bitmap Index】B-Tree索引與Bitmap點陣圖索引的鎖代價比較研究Index索引
- 點陣圖排序排序
- 點陣圖索引導致的會話阻塞問題(p7)索引會話
- 【筆記】Oracle B-tree、點陣圖、全文索引三大索引效能比較及優缺點彙總筆記Oracle索引
- 關於點陣圖索引的split及bitmap to rowid實現問題索引
- 使用點陣圖選單項——點陣圖選單項例項 (轉)
- PHP 文字生成點陣圖PHP
- Redis 應用-點陣圖Redis
- 可寫點陣圖(WriteableBitmap)
- 點陣圖字型匯入
- 使用點陣圖選單項——設定點陣圖型別標記 (轉)型別
- MySQL點陣圖索引解決使用者畫像問題(簡化建立流程)MySql索引
- ClickHouse 留存、路徑、漏斗、session 點陣圖 roaringbitmap 點陣圖最佳化Session