分享
 
 
 

Bitmap Index 的一点探究

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

1:bitmap 索引是分段存储的,也就是说很多条记录可能是分做了N段来存储,也就是有N个begin/end ,基本来说应该按照 extent 来分,若一个extent 很大是否会分,没测试

当新的记录 insert 而使用以前未曾使用过的物理地址的时候,会产生一个bitmap 段来存储,就算只有一条记录

2: 当删除一条记录的时候,在bitmap 索引上做了一个delete 的标记并用一新的记录来标记了,下面请看具体的演示

3: 当 dml发生的时候,会lock住某个值的存储bit的那一rowid所在的记录,参考下面的 row 中 lock ,这样显然会影响并发

SQL create table tn(a number, b number);

Table created.

SQL insert into tn select rownum,mod(rownum,5) from all_objects where rownum < 21;

20 rows created.

SQL commit;

Commit complete.

SQL create bitmap index tn_bitmap on tn(b);

Index created.

SQL exec show_space('tn_bitmap',user,'INDEX');

Free Blocks.............................0

Total Blocks............................16

Total Bytes.............................131072

Unused Blocks...........................14

Unused Bytes............................114688

Last Used Ext FileId....................3

Last Used Ext BlockId...................1954

Last Used Block.........................2

PL/SQL procedure sUCcessfully completed.

SQL select * from tn;

AB

---------- ----------

11

22

33

44

50

61

72

83

94

100

111

AB

---------- ----------

122

133

144

150

161

172

183

194

200

20 rows selected.

SQL alter system dump datafile 3 block 1955;

System altered.

Block header dump:0x00c007a3

Object id on Block? Y

seg/obj: 0x66dacsc: 0x00.18a0d77itc: 2flg: -typ: 2 - INDEX

fsl: 0fnx: 0x0 ver: 0x01

Itl XidUba FlagLckScn/Fsc

0x01 xid:0x0000.000.00000000uba: 0x00000000.0000.00----0fsc 0x0000.00000000

0x02 xid:0x0002.040.000000eauba: 0x00000000.0000.00----0fsc 0x0000.00000000

Leaf block dump

===============

header address 125987932=0x7826c5c

kdxcolev 0

kdxcolok 0

kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y

kdxconco 4

kdxcosdc 0

kdxconro 5

kdxcofbo 46=0x2e

kdxcofeo 7918=0x1eee

kdxcoavs 7872

kdxlespl 0

kdxlende 0

kdxlenxt 0=0x0

kdxleprv 0=0x0

kdxledsz 0

kdxlebksz 8036

row#0[8013] flag: -----, lock: 0

col 0; len 1; (1):80---表示值为0

col 1; len 6; (6):00 c0 7e 03 00 00---rowid 起点的block和行号

col 2; len 6; (6):00 c0 7e 03 00 17---rowid 结束的block和行号,注重17 = 16+7 = 23 ,也就是下面转换后的有效位置截止到23bit

col 3; len 4; (4):ca 10 42 08 ---把该值按照16进制数转化为 11001010 (首字节不表示rowid信息) 00010000 01000010 00001000 ,

凡是从起点到结束点内的1表示该值存在,这里有 一个必须要注重的问题是,这样转化后的位置并不是真实的物理位置,在每个字节内部bit还要颠倒一下顺序,首字节不表示位置信息

也就是说上面的应该转换为 00001000 01000010 00010000 ,发现正好每5个存在一个值为0的记录

row#1[7990] flag: -----, lock: 0

col 0; len 2; (2):c1 02---表示值为1

col 1; len 6; (6):00 c0 7e 03 00 00

col 2; len 6; (6):00 c0 7e 03 00 0f---注重这里是f,也就是一共只有16位,因为1是第一条记录开始的,在16的位置就已经有5条了

col 3; len 3; (3):c9 21 84 注重这里的 2184 正好16位,根据上面描述的规则转换后就是 10000100 00100001,4个1正好表示记录

row#2[7966] flag: -----, lock: 0

col 0; len 2; (2):c1 03---表示值为2

col 1; len 6; (6):00 c0 7e 03 00 00

col 2; len 6; (6):00 c0 7e 03 00 17

col 3; len 4; (4):ca 42 08 01

row#3[7942] flag: -----, lock: 0

col 0; len 2; (2):c1 04 ---表示值为3

col 1; len 6; (6):00 c0 7e 03 00 00

col 2; len 6; (6):00 c0 7e 03 00 17

col 3; len 4; (4):ca 84 10 02

row#4[7918] flag: -----, lock: 0

col 0; len 2; (2):c1 05 ---表示值为4

col 1; len 6; (6):00 c0 7e 03 00 00

col 2; len 6; (6):00 c0 7e 03 00 17

col 3; len 4; (4):ca 08 21 04

----- end of leaf block dump -----

End dump data blocks tsn: 2 file#: 3 minblk 1955 maxblk 1955

SQL delete from tn where a = 2;

1 row deleted.

SQL commit;

Commit complete.

SQL alter system dump datafile 3 block 1955;

System altered.

SQL

Block header dump:0x00c007a3

Object id on Block?

Y

seg/obj: 0x66dacsc: 0x00.18a0d77itc: 2flg: -typ: 2 - INDEX

fsl: 0fnx: 0x0 ver: 0x01

Itl XidUba FlagLckScn/Fsc

0x01 xid:0x0000.000.00000000uba: 0x00000000.0000.00----0fsc 0x0000.00000000

0x02 xid:0x0003.047.000000e9uba: 0x00800dba.00d9.1f--U-2fsc 0x001a.018a0d7d

Leaf block dump

===============

header address 125987932=0x7826c5c

kdxcolev 0

kdxcolok 0

kdxcoopc 0x80: opcode=0: iot flags=--- is converted=Y

kdxconco 4

kdxcosdc 0

kdxconro 6

kdxcofbo 48=0x30

kdxcofeo 7894=0x1ed6

kdxcoavs 7846

kdxlespl 0

kdxlende 1

kdxlenxt 0=0x0

kdxleprv 0=0x0

kdxledsz 0

kdxlebksz 8036

row#0[8013] flag: -----, lock: 0

col 0; len 1; (1):80

col 1; len 6; (6):00 c0 7e 03 00 00

col 2; len 6; (6):00 c0 7e 03 00 17

col 3; len 4; (4):ca 10 42 08

row#1[7990] flag: -----, lock: 0

col 0; len 2; (2):c1 02

col 1; len 6; (6):00 c0 7e 03 00 00

col 2; len 6; (6):00 c0 7e 03 00 0f

col 3; len 3; (3):c9 21 84

row#2[7894] flag: -----, lock: 2---这是删除后的拷贝,我们发现删除的时候该行已经加锁lock: 2

col 0; len 2; (2):c1 03

col 1; len 6; (6):00 c0 7e 03 00 00

col 2; len 6; (6):00 c0 7e 03 00 17

col 3; len 4; (4):ca 40 08 01---我们发现 ca 42已经变成ca40 ,也就是已经少掉一位bit了,正好是删除的那一条记录

row#3[7966] flag: ---D-, lock: 2---这里我们发现值为2的记录已经有删除过的 ---D- ,D表示delete

col 0; len 2; (2):c1 03

col 1; len 6; (6):00 c0 7e 03 00 00

col 2; len 6; (6):00 c0 7e 03 00 17

col 3; len 4; (4):ca 42 08 01

row#4[7942] flag: -----, lock: 0

col 0; len 2; (2):c1 04

col 1; len 6; (6):00 c0 7e 03 00 00

col 2; len 6; (6):00 c0 7e 03 00 17

col 3; len 4; (4):ca 84 10 02

row#5[7918] flag: -----, lock: 0

col 0; len 2; (2):c1 05

col 1; len 6; (6):00 c0 7e 03 00 00

col 2; len 6; (6):00 c0 7e 03 00 17

col 3; len 4; (4):ca 08 21 04

----- end of leaf block dump -----

End dump data blocks tsn: 2 file#: 3 minblk 1955 maxblk 1955

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有