《Oracle Concept》第三章 - 5

背景:

按照《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》第三章 - 4

《Oracle Concept》第三章 - 3

《Oracle Concept》第三章 - 2

《Oracle Concept》第三章 - 1


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


索引扫描

在索引扫描中,数据库会在语句中指定索引列值,遍历索引来提取数据。如果数据库扫描索引,他会消耗N次IO来得到需要的值,这里N是B树索引的高度。这就是Oracle数据库索引的基本原则。


如果一条SQL语句仅仅会访问索引列,那么数据库会直接从索引读取该值,不会从表中检索,即无需回表。如果语句需要访问除索引列外的其他列,则数据库会使用rowid定位表中的行。通常,数据库检索数据会读取一个索引块和一个表块。


可以参考:
Oracle Database Performance Tuning Guide》了解关于索引扫描的详细信息。


全索引扫描

在全索引扫描中,数据库会按序读取整个索引。如果SQL中的谓词(WHERE子句)引用了索引中的一列,或者某些场景下未指定谓词,就会使用全索引扫描。由于全索引扫描中数据是按照索引键值排序的,因此这种扫描消除了排序。


假设应用运行下面的查询:

640?wx_fmt=png


假设department_id,last_name和salary是复合索引键值。Oralce数据库会执行全索引扫描,按序(department_id和last_name)读取,并且使用salary字段作为过滤的条件。使用这种方法,数据库会扫描比employees表更小的数据集,因为所有检索列都包含在查询中了,避免了数据排序。


全扫描会读取整个索引,如下所示:

640?wx_fmt=png


快速全索引扫描

快速全索引扫描是一种无需访问表的全索引扫描,数据库会无序地读取索引数据块。


快速全索引扫描是全表扫描的补充,他的执行需要满足以下条件:

  • 索引必须包含检索中的所有列。

  • 检索结果集中不会出现全空(null)的行。为了满足此要求,索引列至少满足以下条件之一:

    NOT NULL约束。

    在检索结果集中考虑谓词指定避免null空值。


例如,应用使用如下的检索语句,不包含ORDER BY子句中:

640?wx_fmt=png


last_name列拥有NOT NULL约束。如果last_name和salary是复合索引键值,那么就会出现快速全索引扫描读取整个索引来获取请求的信息:

640?wx_fmt=png

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读