[20150203]关于位图索引1.txt

[20150203]关于位图索引1.txt

--许多人知道在oltp系统不适合使用位图索引.它的索引的记录结构如下是:
字段0:键值
字段1:开始rowid
字段2:结束rowid
字段3:位图信息,指示那行记录,位图1=>表示存在.位图0=>表示不存在.

--但是字段4的位图信息,介绍的资料太少,我自己看了链接http://juliandyke.com/Presentations/BitmapIndexInternals.ppt,做一个简单探究.

1.建立测试环境:
SCOTT@test> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

create table t(id number , name varchar2(10), status varchar2(1));
insert into t select rownum-1 id,dbms_random.string('X',10) c20,decode(mod((rownum-1),8),0,'Y','N') c1 from dual connect by levelcommit ;
create bitmap index ib_t_status on t(status);

SCOTT@test> select owner,segment_name,header_file,header_block  from dba_segments where owner=user and segment_name='IB_T_STATUS';
OWNER      SEGMENT_NAME         HEADER_FILE HEADER_BLOCK
---------- -------------------- ----------- ------------
SCOTT      IB_T_STATUS                    4          530

SCOTT@test> select rowid,t.* from t where rownumROWID                      ID NAME                 S
------------------ ---------- -------------------- -
AABI9IAAEAAAACnAAA          0 29SZ9KBWV6           Y
AABI9IAAEAAAACnAAB          1 OZK4INU5JX           N
AABI9IAAEAAAACnAAC          2 XZJFVIADKN           N
AABI9IAAEAAAACnAAD          3 Y2ETB9WP8E           N
AABI9IAAEAAAACnAAE          4 VW70WBUHP1           N

SYS@test> select dump('Y',16) from dual ;

DUMP('Y',16)
----------------
Typ=96 Len=1: 59

SYS@test> select dump('N',16) from dual ;
DUMP('N',16)
----------------
Typ=96 Len=1: 4e

SCOTT@test> @lookup_rowid AABI9IAAEAAAACnAAA
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
    298824          4        167          0 4,167                alter system dump datafile 4 block 167 ;

2.转储一下位图索引结构,我的索引很小,应该仅仅1个根节点.就是在HEADER_BLOCK+1的块地址.

alter system checkpoint ;
alter system dump datafile 4 block 531 ;

Block header dump:  0x01000213
Object id on Block? Y
seg/obj: 0x48f49  csc: 0x02.cb4b0cd8  itc: 2  flg: E  typ: 2 - INDEX
     brn: 0  bdba: 0x1000210 ver: 0x01 opc: 0
     inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
0x02   0xffff.000.00000000  0x00000000.0000.00  C---    0  scn 0x0002.cb4b0cd8
Leaf block dump
===============
header address 182927745636=0x2a9757e264
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 7976=0x1f28
kdxcoavs 7936
kdxlespl 0
kdxlende 0
kdxlenxt 0=0x0
kdxleprv 0=0x0
kdxledsz 0
kdxlebksz 8032
row#0[8004] flag: ------, lock: 0, len=28
col 0; len 1; (1):  4e
col 1; len 6; (6):  01 00 00 a7 00 00
col 2; len 6; (6):  01 00 00 a7 00 3f
col 3; len 9; (9):  cf fe fe fe fe fe fe fe fe
row#1[7976] flag: ------, lock: 0, len=28
col 0; len 1; (1):  59
col 1; len 6; (6):  01 00 00 a7 00 00
col 2; len 6; (6):  01 00 00 a7 00 3f
col 3; len 9; (9):  cf 01 01 01 01 01 01 01 01
----- end of leaf block dump -----
End dump data blocks tsn: 4 file#: 4 minblk 531 maxblk 531

--0x59 = 'Y',也就是键值.
--col 1; len 6; (6):  01 00 00 a7 00 00,也就是开始rowid.除去后面2个字节(相当于行号).记录就是数据块的dba地址.
--col 2; len 6; (6):  01 00 00 a7 00 3f,也就是结束rowid. 003f相当与行号=>63.
SYS@test>  @dfb 010000a7
    RFILE#     BLOCK#
---------- ----------
         4        167

TEXT
----------------------------------------
alter system dump datafile 4 block 167 ;

--看看col 3,col 3; len 9; (9):  cf 01 01 01 01 01 01 01 01,不看第1个字段,很容易知道推出里面的01对应的就是行号等于0,8,16,24,32,40,48,56,8条记录.
--前面键值'N',col 3; len 9; (9):  cf fe fe fe fe fe fe fe fe,也可以相互印证.

SCOTT@test> select rowid,t.* from t where status='Y';

ROWID                      ID NAME                 S
------------------ ---------- -------------------- -
AABI9IAAEAAAACnAAA          0 29SZ9KBWV6           Y
AABI9IAAEAAAACnAAI          8 J5O79GZ6VN           Y
AABI9IAAEAAAACnAAQ         16 8PABJTM5T7           Y
AABI9IAAEAAAACnAAY         24 DKJYCAVC3V           Y
AABI9IAAEAAAACnAAg         32 1SR22OTPZD           Y
AABI9IAAEAAAACnAAo         40 1KOUBWW5W2           Y
AABI9IAAEAAAACnAAw         48 HMWDKMEA84           Y
AABI9IAAEAAAACnAA4         56 SKZ1RMZ8QF           Y
8 rows selected.

--如果我执行如下:
SCOTT@test> select * from t where mod((id),8)=1;
        ID NAME                 S
---------- -------------------- -
         1 OZK4INU5JX           N
         9 3307PUWGHQ           N
        17 SMFXYCJ4M5           N
        25 W61KU1QGC5           N
        33 BWHA1ZAACJ           N
        41 QUI9MT6TPI           N
        49 X5BGM6XBPQ           N
        57 4IT8EZZHTF           N

8 rows selected.

update t set status='Y' where mod((id),8)=1;
commit;

--这样索引的col3应该变成cf 03 03 03 03 03 03 03 03.看看结果是否正确?

SCOTT@test> alter system checkpoint ;
System altered.

SCOTT@test> alter system dump datafile 4 block 531 ;
System altered.

row#0[7948] flag: ------, lock: 2, len=28
col 0; len 1; (1):  4e
col 1; len 6; (6):  01 00 00 a7 00 00
col 2; len 6; (6):  01 00 00 a7 00 3f
col 3; len 9; (9):  cf fc fc fc fc fc fc fc fc
row#1[7920] flag: ------, lock: 2, len=28
col 0; len 1; (1):  59
col 1; len 6; (6):  01 00 00 a7 00 00
col 2; len 6; (6):  01 00 00 a7 00 3f
col 3; len 9; (9):  cf 03 03 03 03 03 03 03 03
----- end of leaf block dump -----
End dump data blocks tsn: 4 file#: 4 minblk 531 maxblk 531

--看到结果与推测一致.看的时候相当于03(二进制00000011)从右向左看.
--剩下的第1个字节:cf表示什么呢? 看下1篇blog.

时间: 2024-10-11 07:16:45

[20150203]关于位图索引1.txt的相关文章

[20150203]关于位图索引2.txt

[20150203]关于位图索引2.txt --许多人知道在oltp系统不适合使用位图索引.它的索引的记录结构如下是: 字段0:键值 字段1:开始rowid 字段2:结束rowid 字段3:位图信息,指示那行记录,位图1=>表示存在.位图0=>表示不存在. --但是字段4的位图信息,介绍的资料太少,我自己看了链接http://juliandyke.com/Presentations/BitmapIndexInternals.ppt,做一个简单探究. 1.建立测试环境: SCOTT@test&g

[20150205]关于位图索引6.txt

[20150205]关于位图索引6.txt --许多人知道在oltp系统不适合使用位图索引.它的索引的记录结构如下是: 字段0:键值 字段1:开始rowid 字段2:结束rowid 字段3:位图信息,指示那行记录,位图1=>表示存在.位图0=>表示不存在. --昨天主要学习了解了字段3的相关信息,昨晚想起以前itpub的讨论,讲位图索引很容易出现阻塞,主要是如果事务发生在同一个行片, --如果不在同一个行片,就不会出现阻塞,还是通过例子来说明: 1.建立测试环境: SCOTT@test>

[20150205]关于位图索引7.txt

[20150205]关于位图索引7.txt --许多人知道在oltp系统不适合使用位图索引.它的索引的记录结构如下是: 字段0:键值 字段1:开始rowid 字段2:结束rowid 字段3:位图信息,指示那行记录,位图1=>表示存在.位图0=>表示不存在. --但是字段4的位图信息,介绍的资料太少,我自己看了链接http://juliandyke.com/Presentations/BitmapIndexInternals.ppt,做一个简单探究. --前面的blog已经讲解了字段3的位图信息

[20150204]关于位图索引5.txt

[20150204]关于位图索引5.txt --许多人知道在oltp系统不适合使用位图索引.它的索引的记录结构如下是: 字段0:键值 字段1:开始rowid 字段2:结束rowid 字段3:位图信息,指示那行记录,位图1=>表示存在.位图0=>表示不存在. --但是字段4的位图信息,介绍的资料太少,我自己看了链接http://juliandyke.com/Presentations/BitmapIndexInternals.ppt,做一个简单探究. --前面的讲解仅仅在1个数据块的情况,如果开

[20150204]关于位图索引3.txt

[20150204]关于位图索引3.txt --许多人知道在oltp系统不适合使用位图索引.它的索引的记录结构如下是: 字段0:键值 字段1:开始rowid 字段2:结束rowid 字段3:位图信息,指示那行记录,位图1=>表示存在.位图0=>表示不存在. --但是字段4的位图信息,介绍的资料太少,我自己看了链接http://juliandyke.com/Presentations/BitmapIndexInternals.ppt,做一个简单探究. --昨天讲了Single-Byte Grou

[20150204]关于位图索引4.txt

[20150204]关于位图索引4.txt --许多人知道在oltp系统不适合使用位图索引.它的索引的记录结构如下是: 字段0:键值 字段1:开始rowid 字段2:结束rowid 字段3:位图信息,指示那行记录,位图1=>表示存在.位图0=>表示不存在. --但是字段4的位图信息,介绍的资料太少,我自己看了链接http://juliandyke.com/Presentations/BitmapIndexInternals.ppt,做一个简单探究. --前面的讲解仅仅在1个数据块的情况,如果开

[20130729]位图索引与死锁.txt

[20130729]位图索引与死锁.txt 昨天遇到一例使用位图索引导致死锁的例子,记录一下. 1.建立测试环境:SQL> @verBANNER--------------------------------------------------------------------------------Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production SQL> create table t(

[20140402]关于位图索引的统计信息

[20140402]关于位图索引的统计信息.txt 前几天,帮别人解决一些数据库问题,看awr报表很容易确定有1个表的索引使用了位图,导致在业务高峰出现阻塞情况, 当然不能简单的把 原来的位图索引删除,建立常规索引,因为查询条件存在is null的情况,我根据情况加入一个非空字段,建立复合索引,因为查询有时候涉及 这个条件,我遇到的问题是查询位图索引统计信息时遇到一些奇怪的情况,自己写一些测试来说明情况. SCOTT@test01p> @ver BANNER                   

python-关于mysql中的位图索引和位片索引问题

问题描述 关于mysql中的位图索引和位片索引问题 老师给了一个作业要求利用其他语言例如Python或者C++来实现位图索引,但是一直教的就是mysql,没要办法建位图索引啊.不知道怎么办才好了,求大神指导... 解决方案 Mysql 索引 解决方案二: http://www.cnblogs.com/yuerdongni/p/4255395.html