前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Oracle Concept》第三章 - 6

《Oracle Concept》第三章 - 6

作者头像
bisal
发布2019-06-15 15:14:05
5060
发布2019-06-15 15:14:05
举报
文章被收录于专栏:bisal的个人杂货铺

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》了解有关跳跃扫描的信息。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年06月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档