首页 > 数据库 > Oracle > 索引的tree dump
实验表:
desc test
Name Null? Type
---------- -------- ----------------------------------------------
A VARCHAR2(30)
B NUMBER
C VARCHAR2(40)
Declare
Num number;
Begin
For num in 1..500000 loop
If mod(num,2)=0 then
Insert into test values('t'||num,num,'M');
Else
Insert into test values('t'||num,num,'F');
End if;
If mod(num,1000)=0 then
Commit;
End if;
End loop;
Commit;
End;
/
sql>Create index test_b_ind on test(b) tablespace users;
sql>select object_id from dba_objects where object_name='TEST_B_IND';
OBJECT_ID
----------
28903
1 row selected.
sql> alter session set events ‘immediate trace name treedump level 28903’;
到bdump目录下找到对应的trc文件,打开如下:
Index tree dump 结果分析
这是一个50万数据的一个表的索引
----- begin tree dump
branch: 0x500f76c 83949420 (0: nrow: 2, level: 2)
branch: 0x8c1424e 146883150 (-1: nrow: 672, level: 1)
leaf: 0x500f76d 83949421 (-1: nrow: 485 rrow: 485)
leaf: 0x500f76e 83949422 (0: nrow: 479 rrow: 479)
leaf: 0x500f76f 83949423 (1: nrow: 479 rrow: 479)
leaf: 0x500f770 83949424 (2: nrow: 479 rrow: 479)
leaf: 0x500f771 83949425 (3: nrow: 479 rrow: 479)
………
leaf: 0x500f8c5 83949765 (664: nrow: 449 rrow: 449)
leaf: 0x500f8c6 83949766 (665: nrow: 449 rrow: 449)
leaf: 0x500f8c7 83949767 (666: nrow: 449 rrow: 449)
leaf: 0x500f8c8 83949768 (667: nrow: 449 rrow: 449)
leaf: 0x8c1424a 146883146 (668: nrow: 449 rrow: 449)
leaf: 0x8c1424b 146883147 (669: nrow: 449 rrow: 449)
leaf: 0x8c1424c 146883148 (670: nrow: 449 rrow: 449)
branch: 0x8c1dece 146923214 (0: nrow: 441, level: 1)
leaf: 0x8c1424d 146883149 (-1: nrow: 449 rrow: 449)
leaf: 0x8c1424f 146883151 (0: nrow: 449 rrow: 449)
leaf: 0x8c14250 146883152 (1: nrow: 449 rrow: 449)
leaf: 0x8c14251 146883153 (2: nrow: 449 rrow: 449)
leaf: 0x8c14252 146883154 (3: nrow: 449 rrow: 449)
leaf: 0x8c14253 146883155 (4: nrow: 449 rrow: 449)
………
leaf: 0x500f9a8 83949992 (435: nrow: 449 rrow: 449)
leaf: 0x8c1deca 146923210 (436: nrow: 449 rrow: 449)
leaf: 0x8c1decb 146923211 (437: nrow: 449 rrow: 449)
leaf: 0x8c1decc 146923212 (438: nrow: 449 rrow: 449)
leaf: 0x8c1decd 146923213 (439: nrow: 84 rrow: 84)
----- end tree dump
对这个结构进行简单的分析
branch: 0x500f76c 83949420 (0: nrow: 2, level: 2)
这个是root节点,有两条记录保存,其level为2,现在来看level为2表示有三层(root--branch--leaf)。nrow:2是说下面有2个子节点,其实是指向下面子节点的指针。
这两个节点就是root节点指向的节点。
branch: 0x8c1424e 146883150 (-1: nrow: 672, level: 1)
其里面包含有672个叶子节点
branch: 0x8c1dece 146923214 (0: nrow: 441, level: 1)
其里面包含有441个叶子节点
下面是叶子节点
leaf: 0x500f76d 83949421 (-1: nrow: 485 rrow: 485)
leaf: 0x500f76e 83949422 (0: nrow: 479 rrow: 479)
leaf: 0x500f76f 83949423 (1: nrow: 479 rrow: 479)
leaf: 0x500f770 83949424 (2: nrow: 479 rrow: 479)
leaf: 0x500f771 83949425 (3: nrow: 479 rrow: 479)
………
leaf: 0x500f8c5 83949765 (664: nrow: 449 rrow: 449)
leaf: 0x500f8c6 83949766 (665: nrow: 449 rrow: 449)
通过这些叶子节点来看,每个节点上存储的数据条数并不是完全相同的,里面存储的1-500000之间的不同的数字。计算了所有叶子节点的nrow,所有叶子节点共存储了500000条记录,这也说明,数据都是在叶子节点上存储。
其中 0x500f76d 83949421 均为dba,前面是16进制,后面是十进制,可以证明:
select to_char(83949420,'xxxxxxxxxxx') from dual;
TO_CHAR(8394
------------
500f76c
当索引range scan 扫描时,会从root开始向下查找,也就是一个查询如果只需要得到索引的数据的话其consistent gets 会有4个左右。[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7312700/viewspace-1000872/ ,如需转载,请注明出处,否则将追究法律责任。