专栏首页bisal的个人杂货铺《Oracle Concept》第三章 - 6

《Oracle Concept》第三章 - 6

Creative Commons

背景:

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

前言《Introduction to Oracle Database》的历史文章

《Oracle Concept》前言-12c内容补充

《Oracle Concept》前言介绍-7

《Oracle Concept》前言介绍-6

《Oracle Concept》前言介绍-5

《Oracle Concept》前言介绍-4

《Oracle Concept》前言介绍-3

《Oracle Concept》前言介绍-2

《Oracle Concept》前言介绍-1

《Oracle Conecpt》 - 目录结构

《Oracle Conecpt》 - 初步认识1

第二章《Tables and Table Clusters》 历史文章

《Oracle Concept》第二章 - 21 (12c内容补充)

《Oracle Concept》第二章 - 20 (12c内容补充)

《Oracle Concept》第二章 - 19

《Oracle Concept》第二章 - 18

《Oracle Concept》第二章 - 17

《Oracle Concept》第二章 - 16

《Oracle Concept》第二章 - 15

《Oracle Concept》第二章 - 14

《Oracle Concept》第二章 - 13

《Oracle Concept》第二章 - 12

《Oracle Concept》第二章 - 11

《Oracle Concept》第二章 - 10

《Oracle Concept》第二章 - 9

《Oracle Concept》第二章 - 8

《Oracle Concept》第二章 - 7

《Oracle Concept》第二章 - 6

《Oracle Concept》第二章 - 5

《Oracle Concept》第二章 - 4

《Oracle Concept》第二章 - 3

《Oracle Concept》第二章 - 2

《Oracle Concept》第二章 - 1

第三章《Indexes and Index-Organized Tables》历史文章:

《Oracle Concept》第三章 - 5

《Oracle Concept》第三章 - 4

《Oracle Concept》第三章 - 3

《Oracle Concept》第三章 - 2

《Oracle Concept》第三章 - 1

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

索引范围扫描

索引范围扫描是一种按序扫描索引的方式,具有如下特征:

  • 在检索条件中指定了索引中的一个或者更多的前导列。条件指定一个或更多的表达式以及逻辑(布尔值)操作符的组合,返回值是TRUE,FALSE或者UNKNOWN。
  • 索引键值可能是0,1或者更多的值。

数据库通常使用索引范围扫描来访问选择度的数据。选择度是检索返回的条数和表中所有数据的百分比,0表示没有任何记录返回,1表示返回的是表中所有行。选择度和检索条件中的一个或者多个谓词紧密相关,例如WHERE last_name LIKE ‘A%’。选择度越接近0,表示谓词可选择度越高,选择度越接近1,表示可选择度越低。

例如,检索employees表last_name以A开头的员工。假设last_name是索引列,如下所示,

数据库能使用索引范围扫描,因为last_name列指定在谓词中,并且一个索引键值中可能包含多个rowid。例如,两个员工叫Austin,所以他们俩的rowid会和Austin的键值关联。

索引范围扫描可以是一个范围条件,例如检索departments表的ID值在10和40之间的记录。为了扫描索引,数据库会在索引叶子块上向后或者向前移动。例如,扫描ID值是10和40之间的记录会定位包含最小键值是10的第一个索引叶子块。扫描会沿着水平方向遍历索引叶子节点链条,直到定位键值大于40的值。

索引唯一性扫描

和索引范围扫描相比,索引唯一性扫描要求每个索引键值必须包含0个或1个rowid。当谓词引用了使用等于操作符在唯一索引键值的所有列时,就会执行唯一性扫描。只要发现第一个记录(因为不会有第二个记录),索引唯一性扫描就会停止。

为了解释,假设用户执行了如下的检索:

假设employee_id列是主键,索引键值如下:

在这个示例中,数据库能使用索引唯一性扫描定位雇员ID是5的记录rowid。

索引跳跃扫描

索引跳跃扫描使用复合索引的逻辑子索引。如果语句检索的是单独的一个索引项,数据库会“跳过”复合索引前导列。如果复合索引前导列的唯一值很少,并且很多不同值在索引的非前导列的时候,索引跳跃扫描是非常有用的。

当复合索引的前导列不在检索谓词中的时候,数据库才可能选择索引跳跃扫描。例如,假设在sh.customers表中检索一个顾客:

顾客表列cust_gender的值是M或者F。假设存在一个复合索引,列为(cust_gender, cust_email)。下面例子展示了索引项部分。

数据库能使用索引跳跃扫描,即使cust_gender不在WHERE子句中。

在跳跃扫描中,逻辑子索引的个数是由前导列唯一值的个数决定的。在上面的例子中,前导列只有两个可能的值。数据库会从逻辑上将索引分为键值F和键值M的两个子索引。

当检索email是Abbey@company.com的顾客记录时,数据库会扫描键值为F的子索引,然后扫描键值为M的子索引。从原理层面,数据库会执行下面的检索:

可以参考:

《Oracle Database Performance Tuning Guide》了解有关跳跃扫描的信息。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《Oracle Concept》第三章 - 5

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/...

    bisal
  • 《Oracle Concept》第三章 - 2

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

    bisal
  • 《Oracle Concept》第三章 - 3

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

    bisal
  • 《Oracle Concept》第三章 - 5

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/...

    bisal
  • 《Oracle Concept》第三章 - 2

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

    bisal
  • 《Oracle Concept》第三章 - 3

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

    bisal
  • SQL 性能调优

    我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享!

    似水的流年
  • 中国的开源框架,何时能在最受欢迎开源深度学习框架榜单上显露名字呢?

    Kears作者Fran?ois Chollet刚刚在Twitter贴出最近三个月在arXiv提到的深度学习框架,TensorFlow不出意外排名第一,Keras...

    机器人网
  • ArXiv最受欢迎开源深度学习框架榜单:TensorFlow第一,PyTorch第四

    来源:Twitter等 作者:文强 【新智元导读】Kears作者François Chollet刚刚在Twitter贴出最近三个月在arXiv提到的深度学习框架...

    新智元
  • 使用分布式人工智能分析无领域知识的电网,ICT和市场(CS AI)

    诸如我们的能源基础设施之类的现代网络物理系统(CPS)变得越来越复杂:基于人工智能(AI)的技术所占的份额越来越高,它利用能源系统的信息和通信技术(ICT)来优...

    刘子蔚

扫码关注云+社区

领取腾讯云代金券