PostgreSQL 位元影像索引

來源:互聯網
上載者:User

什麼是位元影像索引?
位元影像索引就是用一個位元影像表格來存放記錄是否可見的結構。
位元影像索引的一些特性?
位元影像索引實現方法: 用一個BIT位來表示這個屬性對應的值是否存在,存在為1,不存在為0.
位元影像索引作用範圍:處理狀態值,也可以說可選擇度很高的情形。 
位元影像索引的優缺點?
位元影像索引優勢: A, 可以很大的壓縮比率節省空間的;B,非常快速的定位到檢索值可見與否。
位元影像索引缺陷: A,  位元影像本身無序儲存,每次檢索對磁碟都是一次隨機IO;B,因為壓縮儲存,適合OLAP應用。 當然也可以不用壓縮,比如INFOBRIGHT就提供這樣的功能。


PostgreSQL不支援位元影像索引,所以也就不支援位元影像資訊的壓縮儲存。 不過在建立查詢計劃的時候,會為普通的索引(BTREE,HASH)等建立位元影像表,即為Bitmap Heap Table.
其中
Bitmap Index Scan 用來在記憶體中建立一個位元影像表,每一個BIT表示一個與過濾條件有關的頁面。 此頁面有可能有資料為1,不可能為0. 
Bitmap Heap Scan. 在記憶體中建立好的位元影像表指標對應的頁面進行順序掃描,排除不符合的記錄。


來看下位元影像掃描的例子。
表bitmap_test 欄位is_visible 可選擇性很高,只有兩個值, 
對於查詢語句select is_visible from bitmap_test where is_visible = 'yes'來說,對應的查詢計劃:

                                                                 QUERY PLAN                                                                 -------------------------------------------------------------------------------------------------------------------------------------------- Bitmap Heap Scan on bitmap_test  (cost=2023.16..4157.75 rows=99967 width=4) (actual time=24.373..41.054 rows=100000 loops=1)   Recheck Cond: (is_visible = 'yes'::bpchar)   ->  Bitmap Index Scan on idx_bitmap_is_visible  (cost=0.00..1998.17 rows=99967 width=0) (actual time=24.252..24.252 rows=100000 loops=1)         Index Cond: (is_visible = 'yes'::bpchar) Total runtime: 47.175 ms(5 rows)Time: 47.725 ms





從上面這個查詢EXPLAIN結果來看, 先是建立一個位元影像表,完了往上推到頁面,在頁面裡重新檢查每行記錄的值滿足過濾條件。 所有完結後,列印結果。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.