数据库开发小知识普及三:

数据库开发小知识普及三:

1.Oracle BTREE索引的结构

Oracle BTREE索引的结构是由Root(根块)、Branch(茎块)和Leaf(叶子块)三部分组成的。其中,Leaf(叶子块)主要存储了key column value(索引列具体值),以及能具体定位到数据块所在位置的rowid。Root(根块)和Branch(茎块)存储的是子节点的位置信息。

 

如图所示,BTREE索引结构的三大重要特点:

(1)索引的高度较低

(2)索引存储列值

(3)索引本身有序

2.索引回表与优化

(1)什么是索引回表读(TABLE ACCESS BY INDEX ROWID)?

当SQL通过索引找到指定索引列值的信息,在此索引块上不能读到该列以外的其他列的值,需要根据索引块中对应的rowid定位到表所在的数据块,然后从数据块中获取该行其他字段的记录,这就是TABLE ACCESS BY INDEX ROWID的含义。因此,减少索引回表读,可以减少查询的io消耗,提升sql的执行性能。

(2)如何减少索引回表?

a.首先,避免 select * 或者select 全部字段 这种SQL写法。只查询需要的字段

b.SQL优化时,如果能根据业务需求,将多余的字段去除,恰好只查询索引字段,实现索引覆 盖,即可避免回表读操作。

c.如果某些字段不能取消展现,考虑创建联合索引的方式来避免回表。注意,如果联合索引的联合列太多,必然导致索引过大,虽然消除了回表动作,但是索引块变多,在索引中的查询可能要遍历更多块。因此联合索引列不宜过多,一般超过3个字段组成的联合索引都是不合适的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值