ORACLE-位图索引-Yangtingkun
前一段又仔细研究了一下bitmap索引。
测试结果和biti的描述有些出入,下面把结果贴处理,大家讨论讨论

SQL> create table test_bitmap (id number, name varchar2(20), age number(3));
表已创建。
SQL> create bitmap index ind_b_test_bitmap_age on test_bitmap (age);
索引已创建。
SQL> set serverout on
SQL> exec p_unused_space('ind_b_test_bitmap_age', 'index')
total_blocks is 64
total_bytes is 1048576
unused_blocks is 60
unused_bytes is 983040
last_used_extent_file_id is 11
last_used_extent_block_id is 1348
last_used_block is 4
PL/SQL 过程已成功完成。
SQL> insert into test_bitmap values (1, 'aaa', 1);
已创建 1 行。
SQL> alter system dump datafile 11 block 1352;
系统已更改。
Leaf block dump
===============
header address 141643364=0x8714e64
kdxcolev 0
KDXCOLEV Flags = - - -
kdxcolok 0
kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y
kdxconco 4
kdxcosdc 0
kdxconro 2
kdxcofbo 40=0x28
kdxcofeo 16201=0x3f49
kdxcoavs 16161
kdxlespl 0
kdxlende 1
kdxlenxt 0=0x0
kdxleprv 0=0x0
kdxledsz 0
kdxlebksz 16228
row#0[16201] flag: -----, lock: 2
col 0; len 2; (2): c1 02
col 1; len 6; (6): 02 c0 05 16 00 00
col 2; len 6; (6): 02 c0 05 16 00 07
col 3; len 1; (1): 00 当一个段中,只有一条记录的时候,oracle不是采用bitmap映射的方式,而是直接给出这条记录在这个段中的位置。例如这里的00表示了这个段中的第一条记录[/COLOR]
row#1[16222] flag: ---D-, lock: 2
col 0; NULL
col 1; NULL
col 2; NULL
col 3; NULL
----- end of leaf block dump -----
End dump data blocks tsn: 11 file#: 11 minblk 1352 maxblk 1352
源文档 <http://www.itpub.net/thread-114023-1-1.html>