B-tree and Bitmap Index
Oracle has 2 kinds of Index: B-tree index and Bitmap Index.
B-tree index is commonly used index, which is created using CREATE INDEX command.
B-tree index structure:
- Root: Pointer to branch node
- Branch: Pointer to Leaf node. The distinct value of index columns are sorted and divided into different groups. Each branch is mapped to a group of data.
- Leaf: Each Leaf contains the rowid of the records it refers to. Leaf node are linked together in both directions, allowing ascending or descending search. Also leaf nodes can be sorted by ascending or descending.
Bitmap index is some special index, which is created using CREATE BITMAP INDEX command.
Bitmap Index structure:
Root: Pointer to branch node Branch: Pointer to Leaf node. Branch contains the start rowid and end rowid of the leaf blocks it refers to. (It is different from B-tree here. Here is start rowid and end rowid.) Leaf: Leaf is a bitmap. Each bit in the bitmap corresponds to a row in the table. You can think the bitmap like a table with RowID as Row Header and Values as column header. When the row has the value of the column header. It is marked to 1, else 0.
The purpose of creating index is to create a map between records and the key value to speed up query. Different Index structure determines different suitable scenario of the 2 kinds of index:
1) When one column has many different distinct values, the bitmap will be very big and constructing the bitmap may cost more resource. So bitmap index is not suitable for colum with many distinct values.
2) For B-tree index, when you update the key column value of a table, instead of update operation on table, Orace deletes the index entry and insert a new entry to the index. For bitmap index, when the key column value is updated, the whole bitmap at leaf level will be recreated. Comparing with B-tree index, it is time-comsuming and resource intensive. So bitmap index is suitable for those static colums with less update.
3) PCTFREE parameters is different for table and index, as storage parameters. PCTFREE for index means the spaces kept for new entries. There is no PCTUSED parameter for Index. For table that is updated incrementally, PCTFREE should be set to a small value to full use disk space and increase query performance. For table that is update frequently, PCTFREE should be set to a high value to keep enough space for update.
4) Logging or large table should be disabled for performance.
5) Index should be put into separated tablespace for parallel process and better performance.
6) Setting higher value for INITRANS on index than corresponding table for better performance, because index can be used by more process than table.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84734/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Bitmap Indexing in DBMS Bitmap Index vs. B-tree Index low cardinalityIndex
- PostgreSQL DBA(119) - pgAdmin(LIMIT:Index Scan vs Bitmap Index Scan)SQLMITIndex
- 淺析oracle b-tree index搜尋原理OracleIndex
- PostgreSQL DBA(139) - PG 12(B-tree index improvement 1#)SQLIndex
- What is the difference between Mysql InnoDB B+ tree index and hash index? Why does MongoDB use B-tree?MySqlIndexMongoDB
- B-tree
- B-tree索引索引
- c# svg轉Bitmap Bitmap轉ImageSourceC#SVG
- 十四、Mysql之B-TreeMySql
- PostgreSQL的B-tree索引SQL索引
- Jedis bitmap
- Bitmap回收—Canvas: trying to use a recycled bitmap android.graphicsCanvasAndroid
- MySQL探索(一):B-Tree索引MySql索引
- 理解Android BitmapAndroid
- Android Bitmap 使用Android
- BitMap介紹
- WPF Bitmap轉imagesource
- Android Bitmap優化Android優化
- 7.37 BITMAP_OR_AGG
- 7.36 BITMAP_COUNT
- 演算法---BitMap演算法
- BitMap與RoaringBitmap、JavaEWAHJava
- Android: Bitmap/Canvas/DrawableAndroidCanvas
- Android中的BitmapAndroid
- 獲取bitmap大小
- Bitmap、RoaringBitmap原理分析
- 【MySQL(1)| B-tree和B+tree】MySql
- Android-認識BitmapAndroid
- Bitmap優化詳談優化
- Android JNI 之 Bitmap 操作Android
- android bitmap壓縮方案Android
- 7.35 BITMAP_CONSTRUCT_AGGStruct
- 7.34 BITMAP_BUCKET_NUMBER
- 7.33 BITMAP_BIT_POSITION
- Redis 中 Bitmap 詳解Redis
- Clickhouse的bitmap函式函式
- 探索Bitmap使用姿勢
- bitMap原理及實戰
- 多路查詢樹:B-tree/b+tree