oracle索引先导列,Oracle复合B*tree索引branch block内是否包含非先导列

Oracle复合B*tree索引branch block内是否包含非先导列键值?,branchblock

好久不碰数据库底层细节的东西,前几天,一个小家伙跑来找我,非要说复合b*tree index branch block中只包含先导列键值信息,并不包含非先导列键值信息,而且还dump了branch block,用以证明他的说法,从常理和SQL的语句执行信息就可以知道,他的说法是有问题的,但如何证明这一点呢?为了证明这点,也麻烦一次,玩玩多年不碰的dump。下面是他证明自己观点的两个dump结果(一个为单键索引,另一个是复合索引):

496bf58280d1346fc8fa876f47b9d78e.png

0a174ac4eaaf63d1fb565a3d67ff5035.png

下面是本人的测试过程和结果:

create table t1(c1 int,c2 int,c3 int,c4 char(2000),c5 char(2000));

create index t1_idx1 on t1(c1,c2,c3,c4,c5);

begin

for i in 1..1000 loop

insert into t1 values(0,0,i,'aa','aa');

end loop;

end;

/

begin

for i in 1001..2000 loop

insert into t1 values(0,i,i,'bb','bb');

end loop;

end;

/

select segment_name,file_id,block_id

from dba_extents

where segment_name='T1_IDX1'

and extent_id=0;

alter system dump datafile 4 block 195;

trc文件内容:

18be8dfd0f5efe389a10d34412231c9c.png

由此可见,复合b*tree index branch block中,有时不包含非先导列键值,但有时包含。那么,什么情况下包含,什么情况下不包含呢?实验结果为,当先导列键值的选择性足够好时,就无需包含非先导列的键值,不然,也是浪费branck block宝贵的空间;只有当先导列的键值选择性不足够好,必须结合非先导列的键值才能定位到下一级block时,才需要包含非先导列的键值,该测试过程此处略去,感兴趣的同学可以按照这个思路自己测试。

问一下ORACLE的位图索引与B*tree索引的实现原理是怎的?

1、语法

create bitmap index index_name on 表名(字段);

2、举个例子你就能明白了:

如有表 test(id,name,address)

数据

(1,张三,大连)

(2,李四,天津)

(3,王五,北京)

(4,赵六,大连)

....

类似这样的数据,如果查询的时候用到 ,因为数据库中有很多这样的数据,所以一般的索引起不到查询加速的作用,而建立位图索引后会产生如下位图效果:

假设有4条数据(就如上所示)

大连 天津 北京

1 0 0

0 1 0

0 0 1

1 0 0

这样当查询:

select * from 表 where address='大连' or address='北京';

的时候数据库很快就能根据 同行的 1和0 判断出那一条数据符合要求。

---

以上,希望对你有所帮助。

oracle的b-tree索引为何是加not null约束?

用索引提高效率: 索引是表的一个概念部分,用来提高检索数据的效率,ORACLE使用了一个复杂的自平衡B-tree结构. 通常,通过索引查询数据比全表扫描要快. 当

http://www.htsjk.com/shujukunews/2183.html

www.htsjk.Com

true

http://www.htsjk.com/shujukunews/2183.html

NewsArticle

Oracle复合B*tree索引branch block内是否包含非先导列键值?,branchblock 好久不碰数据库底层细节的东西,前几天,一个小家伙跑来找我,非要说复合b*tree index branch block中只包含先导列键信息...

本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.

同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值