http://www.orawh.com/134.html
Index Range Scans
An index range scan is a common operation for accessing selective data. It can be bounded (bounded on both sides) or unbounded (on one or both sides). Data is returned in the ascending order of index columns.
Multiple rows with identical values are sorted in ascending order by rowid。
我以前也看过这段话,但是也就简单的过去了,没有细想过,所以当小霸王问为什么相同值会按照rowid排序的时候我也没给出特别明确的答复。做了以下实验,应该可以给小霸王
一个满意的答复了。
在考虑这个问题的时候我们首先要回顾的知识点是unique index和non-unique index它的构造是不一样
的。对于unique index,它的branch block里面只保存key value和leaf block的address,因为根据这
2个值就可以定位当新值插入时会选择哪个leaf block进行插入,leaf block里面的值也没必要按照rowid的顺序排列了,只需要按照key value排序就行了。但是如果是non-unique index,branch block
里面必须保存key value,leaf block的address,和rowid。在leaf block里面如果key value相同的话
要按照rowid做升序排列,我个人觉得这样做会有2个好处,一个是可以提高相同一个leaf block内相同key value能尽量关联到相同的data block。第2个好处是当插入新的相同key value时能很容易定位插入到哪个block。为了能做到这些,non-unique index必须在branch block里面放入rowid。下面来看一下实验。
首先我们需要创建一张测试表
SQL> create table test(a number);
Table created.
插入2000条数据,值为1到2000
SQL> begin
2 for i in 1..2000 loop
3 insert into test values(i);
4 end loop;
5 commit;
6 end;
7 /
PL/SQL procedure successfully completed.
再插入500条值为500的数据,这样的话这个表存在501条值为500的记录
SQL> begin
2 for i in 1..500 loop
3 insert into test values(500);
4 end loop;
5 commit;
6 end;
7 /
PL/SQL procedure successfully completed.
SQL>
创建一个non-unique index
SQL> create index ind_test on test(a);
Index created.
查看non-unique index的object_id
SQL> select object_id from dba_objects where object_name=’IND_TEST’;
OBJECT_ID
———-
54032
dump non-unique index的层级结构
SQL> ALTER SESSION SET EVENTS ‘immediate trace name TREEDUMP level 54032′;
Session altered.
—– begin tree dump
branch: 0×1000044 16777284 (0: nrow: 6, level: 1)
leaf: 0×1000045 16777285 (-1: nrow: 279 rrow: 279)
leaf: 0×100004d 16777293 (0: nrow: 275 rrow: 275)
leaf: 0×100004e 16777294 (1: nrow: 486 rrow: 486)
leaf: 0×1000046 16777286 (2: nrow: 533 rrow: 533)
leaf: 0×1000048 16777288 (3: nrow: 533 rrow: 533)
leaf: 0×1000047 16777287 (4: nrow: 394 rrow: 394)
—– end tree dump
看一下branch block的所在文件和块号,准备dump
SQL> select dbms_utility.data_block_address_file(16777284) “file”,
2 dbms_utility.data_block_address_block(16777284) “block” from dual;
file block
———- ———-
4 68
dump branch block的实际内容
SQL> alter system dump datafile 4 block 68;
System altered.
分析一下branch block,可以看到leaf block是从kdxbrlmc 16777285这个地址开始
dba: 16777294这个块与其他块有点不同,它的col1保存的就是rowid 01 00 00 3e 00 4a
,这里的col0 c2 06转换成10进制的值就是500,为什么其他leaf block的col1都被置为
TERM省略掉了呢,因为只有16777293,16777294这两个块保存了500这个重复值,所以当继续
插入500时,oracle可以根据这边的col1来定位是插入到16777293还是插入到16777294。插入
其他值并不受这个影响,所以oracle对这个地方做了优化,并不是所有non-unique branch block
都是需要记录rowid的。
分享到:
相关推荐
"Non-Foster Reactance Matching"是一种特殊的阻抗匹配技术,旨在解决传统Foster网络无法应对的高速、宽频或负阻抗情况。本主题主要围绕这一先进匹配技术展开,结合学位论文的研究深度,我们将深入探讨Non-Foster...
"高通平台整个签名NON-HLOS.bin脚本.zip"这个文件包涉及到的是高通平台对特定二进制文件(NON-HLOS.bin)进行安全签名的过程。这个过程对于确保系统的安全性和完整性至关重要,因为只有经过正确签名的文件才能被系统...
json-non-unique-finder 简单的nodejs实用程序,用于在序列化为JSON文件的数组中查找非唯一键。 比较是在序列化元素字符串上完成的。 安装 $ npm install git+...
Algorithms for Non-negative Matrix论文描述希望帮助到大家
Science Research Writing for Non-Native Speakers of English第一版英文版pdf
### Android Studio 中非零退出值 (Non-Zero Exit Value) 错误详解及解决方法 #### 背景概述 在使用 Android Studio 进行应用开发的过程中,有时会遇到 `finished with non-zero exit value` 的错误提示。这类错误...
HAP-Specification-Non-Commercial-Version.zip是一个包含HAP规范非商业版本详细文档的压缩文件,其中的HAP-Specification-Non-Commercial-Version.pdf是该规范的详细说明。 一、HAP协议概述 HAP协议是Apple公司...
ESP8266 Non-OS SDK是一个适用于ESP8266芯片的操作系统SDK,它为开发者提供了丰富的API接口,用于开发各种硬件应用。SDK是非操作系统版本,这意味着它不依赖于像FreeRTOS这样的实时操作系统,而是提供一个较为简单的...
"Laravel开发-unique-hashids"的主题聚焦于如何利用`Hashids`库在Laravel项目中生成独特的、不可预测的ID替代传统的自增ID。`Hashids`是一个流行的PHP库,它允许我们将整数转换为更安全、更美观的字符串。 首先,让...
《科学研究写作:面向非母语和母语者的指南》是一本专为科研人员设计的英语论文写作教程,旨在帮助无论是英语为非母语还是母语的学者提升他们在科研领域的英文写作能力。本书分为第一版和第二版,内容涵盖从基础到...
本文档的标题“Monte Carlo Filter and Smoother for Non-Gaussian Nonlinear State Space Models”指出了其核心研究内容:利用蒙特卡洛方法(Monte Carlo method)来处理非高斯(Non-Gaussian)、非线性(Nonlinear...
Non-Convex Mesh Collider Automatic Generator v1
非极大值抑制(Non-Maximum Suppression,简称NMS)是一种广泛应用于计算机视觉任务中的低层次处理技术,尤其在边缘检测、目标检测等领域扮演着重要的角色。NMS的目的在于保留图像中的局部最大值点,同时抑制其他...
"第二版Science Research Writing for Non-Native Speakers of English" 这本书是为非英语母语者的科学研究写作指南,旨在帮助他们提高英语写作能力,特别是在科学研究领域中。下面是这本书中的一些重要知识点: 1...
PDC 和non-PDC 控制条件下T-S 模糊广义系统的可容许条件,林鹏,胡刚,论文分析了一类连续T-S 模糊广义系统的可容许条件(正则、无脉冲和稳定)。应用模糊型的Lyapunov 函数和放松的矩阵不等式等价条件,��
Blockchain Basics A Non-Technical Introduction in 25 Steps 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
在当今全球化的科学界,英语作为国际通用语言,其在科研交流中的重要性不言而喻。英语母语者在科研写作时可能自然而然地运用语言技巧,但对于非英语母语的研究者而言,清晰、准确和有效地用英文表达科学观点则是一个...
2. **non-ZTS**: ZTS代表"ZEND Thread Safety",即 Zend 线程安全。在多线程环境中,ZTS 版本的PHP可以帮助防止数据在不同线程间冲突。然而,大多数共享主机环境和单进程Web服务器并不需要这个特性,因此,"non-ZTS...