oracle中的索引扫描[亲测有效]

oracle中的索引扫描[亲测有效]一、INDEX UNIQUE SCAN(索引唯一扫描) 索引唯一性扫描(INDEX UNIQUE SCAN)是针对唯一性索引(UNIQUE INDEX)的扫描,它仅仅适用于where条件里是等值查询…

oracle中的索引扫描

一、INDEX UNIQUE SCAN(索引唯一扫描)

索引唯一性扫描(INDEX UNIQUE SCAN)是针对唯一性索引(UNIQUE INDEX)的扫描,它仅仅适用于where条件里是等值查询的目标SQL。因为扫描的对象是唯一性索引,所以索引唯一性扫描的结果至多只会返回一条记录。

二、INDEX RANGE SCAN(索引范围扫描)

索引范围扫描(INDEX RANGE SCAN)适用于所有类型的B树索引,当扫描的对象是唯一性索引时,此时目标SQL的where条件一定是范围查询(谓词条件为 BETWEEN、<、>等);当扫描的对象是非唯一性索引时,对目标SQL的where条件没有限制(可以是等值查询,也可以是范围查询)。 索引范围扫描的结果可能会返回多条记录,其实这就是索引范围扫描中”范围”二字的本质含义。

三、INDEX FULL SCAN(索引全扫描)

索引全扫描(INDEX FULL SCAN)就是指要扫描目标索引所有叶子块的所有索引行。这里需要注意的是,索引全扫描需要扫描目标索引的所有叶子块,但这并不意味着需要扫描该索引的所有分支块。在默认情况下,Oracle在做索引全扫描时只需要通过访问必要的分支块定位到位于该索引最左边的叶子块的第一行索引行,就可以利用该索引叶子块之间的双向指针链表,从左至右依次顺序扫描该索引所有叶子块的所有索引行了。

四、INDEX FAST FULL SCAN(索引快速扫描)

索引快速全扫描(INDEX FAST FULL SCAN)和索引全扫描(INDEX  FULL SCAN)极为类似,它也适用于所有类型的B树索引(包括唯一性索引和非唯一性索引)。和索引全扫描一样,索引快速全扫描也需要扫描目标索引所有叶子块的所有索引行。

索引快速全扫描与索引全扫描相比有如下三点区别。

(1)索引快速全扫描只适用于CBO。

(2)索引快速全扫描可以使用多块读,也可以并行执行。

(3)索引快速全扫描的执行结果不一定是有序的。这是因为索引快速全扫描时Oracle是根据索引行在磁盘上的物理存储顺序来扫描,而不是根据索引行的逻辑顺序来扫描的,所以扫描结果才不一定有序(对于单个索引叶子块中的索引行而言,其物理存储顺序和逻辑存储顺序一致;但对于物理存储位置相邻的索引叶子块而言,块与块之间索引行的物理存储顺序则不一定在逻辑上有序)。

五、INDEX SKIP SCAN(索引跳跃扫描)

索引跳跃式扫描(INDEX SKIP SCAN)是Oracle 9i后提供,适用于所有类型的复合索引(包括唯一性索引和非唯一性索引),它使那些在where条件中没有对目标索引的前导列 (索引包含的第一列) 指定查询条件但同时又对该 索引的非前导列(不是索引的第一列)指定了查询条件的目标SQL依然可以用上该索引,这就像是在扫描该索引时跳过了它的前导列(索引包含的第一列),直接从该索引的非前导列(不是索引的第一列)开始扫描一样(实际的执行过程并非如此),这也是索引跳跃式扫描中”跳跃”(SKIP)一词的含义。

简单来说:有时候复合索引的前导列(索引包含的第一列)没有在查询语句中出现,oralce也会使用该复合索引,这时候就使用的INDEX SKIP SCAN;

触发 INDEX SKIP SCAN 前提条件:表有一个复合索引,且在查询时有除了前导列(索引中第一列)外的其他列作为条件,并且优化器模式为CBO时当Oracle发现前导列的唯一值个数很少时,会将每个唯一值都作为常规扫描的入口,在此基础上做一次查找,最后合并这些查询。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8835.html

(0)
上一篇 2023-02-21 10:30
下一篇 2023-02-21

相关推荐

  • MySQL数据库远程访问权限的两种打开办法

    MySQL数据库远程访问权限的两种打开办法在我们使用mysql数据库时,有时我们的程序与数据库不在同一机器上,这时我们需要远程访问数据库。缺省状态下,mysql的用户没有远程访问的权限。 下面介绍两种方法,解决这一问题。 1、改表法 可能是…

    2023-02-14
    141
  • PostgreSQL中的死锁和锁等待[通俗易懂]

    PostgreSQL中的死锁和锁等待[通俗易懂]开始之前明确一下死锁和锁等待这两个事件的异同相同的之处:两者都是当前事物在试图请求被其他事物已经占用的锁,从而造成当前事物无法执行的现象不同的之处:死锁是相关session双方或者多方中必然要牺牲(回

    2023-03-25
    145
  • Python 3ssl核心

    Python 3ssl核心Python语言是一种高级编程语言,源于1989年,由Guido van Rossum创建。Python是一种易于学习、易于阅读和易于维护的语言。Python 3ssl是Python中的一种加密模块,它提供了各种加密算法、协议和证书的实现。Python 3ssl提供的功能十分强大,很多使用Python开发的应用和项目与Python 3ssl息息相关。本篇文章将详细介绍Python 3ssl的相关知识,以及如何使用Python 3ssl进行加密和解密操作。

    2024-06-25
    52
  • Python Redis连接池

    Python Redis连接池Redis是一个开源的,内存的数据结构存储系统,它被广泛地应用于缓存、消息中间件和排行榜等场景中。在Python中,我们可以利用redis-py库来连接Redis数据库。但是,在多个Python程序同时连接同一个Redis服务时,即使是轻微的时间差异都会导致每个程序都需要重新建立一个新的连接,这会增加Redis服务器的负载和网络开销。为了减少这些开销,我们可以利用Python中提供的Redis连接池来解决这个问题。

    2024-09-20
    15
  • WSDL测试webservice接口记录[亲测有效]

    WSDL测试webservice接口记录[亲测有效]WSDL测试webservice接口记录 osc_sdo8al3q 2018/09/12 17:51 阅读数 104 收到一个事情,需要对接第三方API,对方给了个service,看了一下,原来是w…

    2023-04-12
    152
  • Python实现打开.py文件的方法

    Python实现打开.py文件的方法在Python中,可以使用open()函数打开.py文件,代码如下所示:

    2024-01-09
    117
  • 优化数值计算:Python实现正弦函数的快速计算

    优化数值计算:Python实现正弦函数的快速计算在数值计算领域中,正弦函数是非常常见的一个函数,无论从理论研究还是实际应用中都具有重要意义。正弦函数的计算是一项基本任务,如何快速、准确地计算正弦函数一直是计算机领域的一大挑战。Python作为一门高级编程语言,在数学计算和科学计算方面具有广泛的应用和良好的性能表现。因此使用Python实现正弦函数的快速计算将会非常的有意义。

    2024-03-17
    86
  • Python随机生成字符串

    Python随机生成字符串在Python中,如果需要生成随机字符串,我们可以使用Python自带的random模块。该模块提供了生成随机数的方法,我们可以通过这些方法轻松生成随机字符串。在本文中,我们将介绍如何使用Python随机生成字符串。

    2024-05-05
    67

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注