根:分支的范围,范围块的地址

----- begin tree dump

branch: 0x1000c93 16780435 (0: nrow: 5, level: 1)

   leaf: 0x1000c94 16780436 (-1: nrow: 485 rrow: 485)

   leaf: 0x1000c95 16780437 (0: nrow: 479 rrow: 479)

   leaf: 0x1000c96 16780438 (1: nrow: 479 rrow: 479)

   leaf: 0x1000c97 16780439 (2: nrow: 479 rrow: 479)

   leaf: 0x1000c98 16780440 (3: nrow: 78 rrow: 78)

----- end tree dump

SQL> select dbms_utility.data_block_address_file('16780435') FILE_ID,

       dbms_utility.data_block_address_block('16780435') BLOCK_ID

  from dual;  2    3

FILE_ID   BLOCK_ID

---------- ----------

  4  3219

Btree 索引的 root block总是segment header+1,所以我查询该索引的段头 

 

SQL>  select header_file,header_block from dba_segments where segment_name='IDX_TEST';

HEADER_FILE HEADER_BLOCK

----------- ------------

   4     3218

0x1000c93 16进制表示的DBA(data block address),

DBA 之后表示在同一层次的相对位置(root 从0开始,branch 以及leaf从 -1开始) 

nrow  表示块中包含了多少条目(包括delete的条目) 

rrow  表示块中包含的实际条目(不包括delete的条目) 

level 表示从该block到leaf的深度(leaf没有 level)

分支块之间没有联系

索引当中leaf 永远只有1层

为什么 叶子块 是双向链表?

索引默认升序排序

索引当中数据最小放最左边,最大放最右边

对于主键的索引,只增长的都是右边热。

索引的 range scan 究竟是 咋个扫描的???

范围扫描将会从根数据块开始到第一个包含符合特定条件的条目所在的叶子块来遍历索引结构。 

 

再从那一点开始,从索引条目中取出一个行编号然后取出相应的表数据块(通过索引行编号访问数据表) 

 

在第一行被取出来之后,之前的叶子索引块将再一次被访问并读取下一个索引条目来获取下一个行编号。 

 

这种索引叶子块之间的反复来回将会不断持续直到所有匹配的索引都被读出。 

 

因此,所需访问数据块的次数将包含索引中的分支块数(可以通过索引的blevel统计信息得出) 

加上符合条件的索引条目数乘以2. 

 

必须乘以2是因为每取出表中返回5行数据并且blevel为3,则总的需要访问的数据块次数将是 (5行 * 2) + 3=13

索引的 range scan 究竟是 咋个扫描的???

首先找到索引的root块

oracle 为啥能找到 索引的root??

因为root块总是segment header+1

找到root就会找到分支,找到分支就会找到叶子节点。

index rang scan的更多相关文章

  1. INDEX RANG SCAN无需回表的情况

    create table a3 as select * from dba_objects create index a3_idx1 on a3(owner); select owner from a3 ...

  2. index full scan/index fast full scan/index range scan

    **************************1************************************* 索引状态:          valid.      N/A .    ...

  3. Index Skip Scan in Oracle in 11g

    http://viralpatel.net/blogs/oracle-index-skip-scan/ in 11g the same sql use index skip scan but in 1 ...

  4. index unique scan 与index range scan等的区别

    存取Oracle当中扫描数据的方法(一) Oracle 是一个面向Internet计算环境的数据库.它是在数据库领域一直处于领先地位的甲骨文公司的产品.可以说Oracle关系数据库系统是目前世界上流行 ...

  5. Oracle分区表之分区范围扫描(PARTITION RANGE ITERATOR)与位图范围扫描(BITMAP INDEX RANGE SCAN)

    一.前言: 一开始分区表和位图索引怎么会挂钩呢?可能现实就是这么的不期而遇:比如说一张表的字段是年月日—‘yyyy-mm-dd’,重复率高吧,适合建位图索引吧,而且这张表数据量也不小,也适合转换成分区 ...

  6. Oracle 11G INDEX FULL SCAN 和 INDEX FAST FULL SCAN 对比分析

    SQL> drop table test; 表已删除. SQL> create table test as select * from dba_objects where 1!=1; 表已 ...

  7. 【每日一摩斯】-Index Skip Scan Feature (212391.1)

    INDEX Skip Scan,也就是索引快速扫描,一般是指谓词中不带复合索引第一列,但扫描索引块要快于扫描表的数据块,此时CBO会选择INDEX SS的方式. 官方讲的,这个概念也好理解,如果将复合 ...

  8. INDEX FAST FULL SCAN和INDEX FULL SCAN

    INDEX FULL SCAN 索引全扫描.单块读 .它扫描的结果是有序的,因为索引是有序的.它通常发生在 下面几种情况(注意:即使SQL满足以下情况 不一定会走索引全扫描) 1. SQL语句有ord ...

  9. Index Full Scan vs Index Fast Full Scan-1103

    [Oracle] Index Full Scan vs Index Fast Full Scan作者:汪海 (Wanghai) 日期:14-Aug-2005 出处:http://spaces.msn. ...

随机推荐

  1. (转载)JavaScript中面向对象那点事

    鉴于自己在JavaScript这方面比较薄弱,所以就找了一本书恶补了一下(被称为犀利书的JavaScript权威指南).书的内容虽然多了点,但这也充分说明了js中的东西还是挺多的.虽然我们的定位不是前 ...

  2. hdu 3450 Counting Sequences

    /* n*n暴力 这个很好想 */ #include<cstdio> #define maxn 100010 #define mod 9901 using namespace std; i ...

  3. C# 内存管理优化实践

    内存优化畅想系列文章已经结束了,很多读者读完之后可能觉得“然并卵”,毕竟都是给微软提的建议而已,现在都没有实现.那么为了优化内存,有没有什么我们现在就能用的技巧呢?我的答案是:有.网上关于.net内存 ...

  4. 用CSS+Jquery实现一个漂浮的窗体

    一.项目需求: 实现一个用于网站主页面 从窗体左上角开始飘到右下角 之后又飘到右上角 十秒之后消失的效果. 二.需求分析: 首先 应当想要漂浮的内容放在一个容器内,也就是一个DIV,设计它的样式,不管 ...

  5. weex APIs

    1.通过这个$vm()上下文访问这些api在脚本的方法 <script> module.exports = { methods: { somemethod: function() { th ...

  6. 别人走的路--uap

    首先,我先谈谈我个人的经历,我今年34岁了,做了10多年的ERP实施顾问,大学刚毕业的时候是做ERP软件开发的,后来转岗做了实施顾问.根据我的个人经验,我给你几点建议.1.既然是很大的公司,那么ERP ...

  7. copy file using FileReader/Writer.

    The code below demonstates copying file using 'FileReader' and 'FileWriter'. class CopyV2 extends Ti ...

  8. SQL SERVER将指定表中的指定字段按照(,)逗号分隔

    不开心呀,早知道不跳了,一跳跳坑里来了. 使用方式: DECLARE @ConsigneeAddressId INT; SET @ConsigneeAddressId = 1; SELECT  * F ...

  9. ASIHttpRequest网络请求第三方类库使用方法详解

    一. 第一步首先你要从网络上下载ASIHttpRequestlib, 下载以后解压,增加到你的工程里面, 这个时间检查工程内部是否已经导入成功,文件结构如下: ASIHTTPRequestConfig ...

  10. javascript基础学习(三)

    javascript之运算符 学习要点: 表达式 运算符:一元运算符,算术运算符,关系运算符,逻辑运算符,*位运算符,赋值运算符 一.表达式 表达式有常量表达式,变量表达式,复合表达式. 二.算术运算 ...