日期:2014-05-16  浏览次数:20542 次

B树索引、位图索引和散列索引

索引在数据结构上可以分为三种B树索引、位图索引和散列索引

?

B树索引

?

结构:



?

?

?

特点:

?

1.单列索引不存储null值。

?

? ? 索引不能存储Null,所以对这列采用is null条件时,因为索引上根本没Null值,不能利用到索引,只

?

能全表扫描。

?

? ?为什么索引列不能存Null值呢?将索引列值进行建树,其中必然涉及到诸多的比较操作。Null值

?

的特殊性就在于参与的运算大多取值为null。这样的话,null值实际上是不能参与进建索引的

?

过程。也就是说,null值不会像其他取值一样出现在索引树的叶子节点上。

?

B树索引测试1:NULL是否存在索引上。

?

?

create table btree_test(id number,code varchar2(10));

create index idx_btree_test_id on btree_test(id,code);

select object_id from user_objects where object_name='IDX_BTREE_TEST_ID';

alter session set events 'immediate trace name treedump level 59097';

insert into btree_test values(null,null);

alter session set events 'immediate trace name treedump level 59097';

insert into btree_test values(null,'1');

alter session set events 'immediate trace name treedump level 59097';

insert into btree_test values(1,null);

alter session set events 'immediate trace name treedump level 59097';

?

?

然后查看转储文件,admin\数据库名\udump

?

发现这样的信息:

?

*** 2013-07-19 14:56:41.827

----- begin tree dump

leaf: 0x140142c 20976684 (0: nrow: 0 rrow: 0)

----- end tree dump

*** 2013-07-19 14:56:54.480

----- begin tree dump

leaf: 0x140142c 20976684 (0: nrow: 1 rrow: 1)

----- end tree dump

*** 2013-07-19 14:57:08.139

----- begin tree dump

leaf: 0x140142c 20976684 (0: nrow: 2 rrow: 2)

----- end tree dump

?

nrow当前节点所含索引条目的数量(包括delete的条目)

?