索引在数据结构上可以分为三种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的条目)
?