index rang scan
根:分支的范围,范围块的地址
----- 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的更多相关文章
- INDEX RANG SCAN无需回表的情况
create table a3 as select * from dba_objects create index a3_idx1 on a3(owner); select owner from a3 ...
- index full scan/index fast full scan/index range scan
**************************1************************************* 索引状态: valid. N/A . ...
- 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 ...
- index unique scan 与index range scan等的区别
存取Oracle当中扫描数据的方法(一) Oracle 是一个面向Internet计算环境的数据库.它是在数据库领域一直处于领先地位的甲骨文公司的产品.可以说Oracle关系数据库系统是目前世界上流行 ...
- Oracle分区表之分区范围扫描(PARTITION RANGE ITERATOR)与位图范围扫描(BITMAP INDEX RANGE SCAN)
一.前言: 一开始分区表和位图索引怎么会挂钩呢?可能现实就是这么的不期而遇:比如说一张表的字段是年月日—‘yyyy-mm-dd’,重复率高吧,适合建位图索引吧,而且这张表数据量也不小,也适合转换成分区 ...
- 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; 表已 ...
- 【每日一摩斯】-Index Skip Scan Feature (212391.1)
INDEX Skip Scan,也就是索引快速扫描,一般是指谓词中不带复合索引第一列,但扫描索引块要快于扫描表的数据块,此时CBO会选择INDEX SS的方式. 官方讲的,这个概念也好理解,如果将复合 ...
- INDEX FAST FULL SCAN和INDEX FULL SCAN
INDEX FULL SCAN 索引全扫描.单块读 .它扫描的结果是有序的,因为索引是有序的.它通常发生在 下面几种情况(注意:即使SQL满足以下情况 不一定会走索引全扫描) 1. SQL语句有ord ...
- 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. ...
随机推荐
- systemTAP 学习
http://blog.csdn.net/moonvs2010/article/category/1570309
- 用 Qt 中的 QDomDocument类 处理 XML 文件(上)
我们可以看到,如果所要读取的XML文件不是很大,采用DOM读取方法还是很便捷的,由于我用的也是DOM树读取的方法,所以,本文所介绍的也主要是基于DOM的方法读取. 根据常用的操作,我简单的把对XM ...
- 学点bootstrap
- .net 学习路线感想
从上到大学到现在工作,已经有六年多了,发现学习编程到以开发为工作也是一个挺长的过程的. 大学中,从c语言到java.C#到其他各种语言的学习,还有其他知识的学习如:数据库(oracle.sql Ser ...
- Java方法-数组
[Java数组] 1. 用sort()方法对Java数组进行排序,及如何使用 binarySearch() 方法来查找数组中的元素 binarySearch() 返回值: 如果它包含在数组中,则返回搜 ...
- jsp-文件的上传(转).
该程序的主要代码,我引用网友的,并做了一些改进.上这个帖子的原因之一,是为了修正之前自己的一些误解. 概述: 一些网友,包括我,也曾经试图通过 input type 为 file的控件,获取其文件的完 ...
- C#中Dictionary、ArrayList、Hashtable和Array的区别
IDictionary接口是所有字典类集合的基本接口,该接口与ICollection,IEnumerable接口是所有非泛型类集合的最基本的接口 IEnumerable接口用于公开枚举数,该枚举数支持 ...
- Const和ReadOnly
总结一下const和readonly有这么几条区别: const和readonly的值一旦初始化则都不再可以改写: const只能在声明时初始化:readonly既可以在声明时初始化也可以在构造器中初 ...
- CSRF 攻击的应对之道
转载自imb文库 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在 ...
- 浅谈 trie树 及其实现
定义:又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构, 如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. 核心思想:是空间换时间.利用字符串的公共前缀来降低查询时间的开 ...