首页 > 数据库 >《Oracle Concept》第三章 - 8

《Oracle Concept》第三章 - 8

时间:2023-06-19 13:05:44浏览次数:52  
标签:Concept 第三章 20 叶子 索引 键值 Oracle 反向


背景:

按照《Oracle Conecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。



本文主题:第三章《Indexes and Index-Organized Tables》 - Overview of Indexes。


反向索引

反向索引也是一种B-树类型的索引,和普通B-树索引不同的是,他会在物理层上将每个索引键值的字节逆序排列。例如,如果索引键值是20,在标准B-树索引中,十六进制存储的两个字节是C1和15,对于反向索引,他存储的就是15和C1。


反向索引能解决B-树索引最右侧叶子块争用的问题。在Oracle RAC架构下尤其明显,因为多个实例会反复修改相同的数据块。例如,orders表中主键是序列,递增顺序。集群中的一个节点上主键值增加到20,另一个节点增加到21,每个实例都要将他的值写入到索引最右侧同一个叶子块中,此时就会产生了争用。


在反向索引中,字节顺序的反转会让插入操作发生在索引的所有叶子键值上。例如,键值20和21在标准B-树索引中可能是相邻存储的,然而在反向索引中,他们会存储在不同的数据块中。因此,这种递增顺序的键值插入所消耗的I/O就会更加平均。


由于反向索引的数据不是按照列的顺序存储的,因此在某些场景下就无法支持索引范围扫描的检索。例如,一个用户需要检索ID值大于20的记录,数据库就无法从包含20这个ID值的索引叶子块水平移动进行检索。


换句话说,反向索引的副作用,要清楚才行,如果应用大多数查询是检索“最近的”数据,通常只需要缓存整个索引很少的一部分,对于反向索引,他的目的是将热点从索引最右侧叶子块,分配到索引不同的区域,因此可能需要缓存索引的大部分块,才能达到和反转之前相同的缓存效果。


如图,这是普通B-树索引,101-105可能存储在索引最右侧一个叶子块,

《Oracle Concept》第三章 - 8_缓存


改成反向索引的,此时101-105可能位于不同的索引叶子块,虽然不存在最右侧叶子块的争用了,但是相同的范围检索条件,可能消耗更多的I/O,

《Oracle Concept》第三章 - 8_键值_02


针对这种场景,散列分区索引,可能是另一种解决方案,《一个索引热块的性能问题》,就介绍了一个相关的问题。


可以参考:

《Oracle Database Performance Tuning Guide》了解关于反向索引设计的考虑。

标签:Concept,第三章,20,叶子,索引,键值,Oracle,反向
From: https://blog.51cto.com/u_13950417/6512439

相关文章

  • 《Oracle Concept》第三章 - 5
    背景:按照《OracleConecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。本文主题:第三章《IndexesandIndex-OrganizedTables》-OverviewofIndexes。索引扫描在索引扫描中,数据库会在语句中指定索引列值,遍历索引来提取数据。如果数据库扫描索引,他会消耗N次I......
  • 如何根据v$parameter查询Oracle隐含参数
    Oracle的隐含参数在Oracle的官方文档中是不会出现的,这些参数主要是Oracle内部用于控制某些功能的开关,或者就像今天eygle讲的,Oracle牛逼之处就是可能几年前开发的一个功能就放到当时的版本中,让你“试用”,但你却不知道,如果碰巧因为遇见了这个问题的bug,Oracle会告诉你可以使用这个参数......
  • Oracle的体系结构图万花筒
    虽然现在Oracle的版本频繁更新,但万变不离其宗,学习Oracle最重要的一张图就是Oracle体系结构图,由他延展开来的知识可谓是相当丰富,要是能讲清楚这张图,可以说你和大师很近了。这是来自杨大师公众号的一篇文章,汇总了各版本,Oracle高清体系结构图,《【图示篇】_Oracle10g,11g,12c,18c结构......
  • 非Oracle Linux下安装Oracle 19c
    《Oracle19c之RPM安装》介绍了在OracleLinux平台下安装Oracle19c的过程,其实无论是19c,还是11g,用OracleLinux会为你省不少的事情,毕竟同为Oracle产品,从推广角度看,肯定会相对其他平台提供更多的便利性,例如提前预安装了需要的Package,设置了信号量,创建了各种账号、路径和权限。这次采......
  • OpenJDK和Oracle JDK有什么区别和联系?
    《Linux7安装Oracle11g打怪经历》的安装过程中,启动图形界面,需要指定jre路径,当时使用yuminstalljdk安装的,并不能解决问题,查看版本才知道他是OpenJDK,最终使用OracleJDK,才解决的问题,那OpenJDK和OracleJDK究竟有什么区别?OpenJDKJava最早由SUN公司(SunMicrosystems,发起于美国斯坦......
  • Linux 7安装Oracle 11g打怪经历
    最近接到个需求,要将一套开发环境中Linux6平台的Oracle11g,迁移到两套Linux7平台,原以为很简单,但过程中,确实历经坎坷,就像过山车一般,解决这个问题,又碰到下一个。软件信息RedHatLinux7.5Oracle11.2.0.4坑坑坑1.软链接为了安装路径的标准和简便,可以使用软链接,语法如下,ln-s【目标......
  • 非Oracle Linux下Oracle 19c CDB数据库安装
    《非OracleLinux下安装Oracle19c》我们安装了non-cdb的19c数据库,通过这个脚本,还可以搭建cdb的数据库。1.修改安装脚本cp/etc/init.d/oracledb_ORCLCDB-19c/etc/init.d/oracledb_pdbisal-19c其中要改几处,ORACLE_SID改成新的,LISTENER_NAME改成新的,CREATE_AS_CDB之前我写的false,......
  • Oracle优化器对谓词顺序处理的一个场景
    最近听了个讲座,其中介绍到了Oracle的谓词,原始版本的例子,如下所示,从数据上能看到,c1='3'的时候,c2的值是个字符串类型的数字,SQL>createtabletest(c1char(1),c2varchar2(1));Tablecreated.SQL>insertintotestvalues('1','A');1rowcreated.SQL>insertintotes......
  • Windows调试Oracle数据库问题的一些手段
    最近需要在Windows的跳板机上访问远程的Oracle数据库进行调试。Windows中只有个精简版OracleClient,以及PLSQLDeveloper客户端。如果用惯了Linux,再用Windows,确实不知所措。但这就是个从生疏到熟练的事儿,最近看的一本书中描述得很恰当,Themosteffectivewaytodealwithaworry......
  • 《Oracle Concept》第三章 - 4
    背景:按照《OracleConecpt》的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础。本文主题:第三章《IndexesandIndex-OrganizedTables》-OverviewofIndexes。B树索引B树索引,是平衡树的缩写,他是数据库索引中最常用的一种类型。一个B树索引是一种将数值有序划分到不......