`

oracle数据访问途径之索引扫描

阅读更多

oracle总共只有两种基本的数据访问途径:全扫描 或者索引扫描。

 

      默认的索引类型是B-树索引。索引建立在表中的一个或多个列或者是列的表达式上,将列值和行编号(ROWID)一起存储。在索引中还保存着一些其他信息,但对你来说仅需要关心列值和行编号即可。行编号是一个用来唯一标记表中行的伪列。它是物理表中行数据的内部地址,包含两个地址,其一为指向数据表中包含该行的块所存放数据文件的地址,另一个是可以直接定位到数据行自身的这一行在数据块中的地址。参见rowid详解

      也就是说对于通过索引扫描所获取的每一行,都至少需要访问两个数据块:至少一个索引块和一个数据块。

 

      索引扫描类型包括:索引范围扫描、索引唯一扫描、索引全表扫描、索引跳跃扫描、索引快速扫描。

 

      索引的聚簇因子统计信息帮助优化器生成使用索引的成本信息,并且是表中建立了索引的数据排序优良度的一个度量值。索引的聚簇因子向优化器表明了具有同样索引值的数据行是不是存放在同一个或连续的一系列数据块中,或者数据行是否被分散存放在表的多个数据块中。参见聚簇因子笔记

 

     注意:聚簇因子与表中数据而不是与索引相关。因此,重建索引对它没有任何影响。

 

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

 

      当谓语中包含使用unique或primary key索引的列作为条件的时候就会选用索引唯一扫描。这种类型的索引能够保证对于某个特定的值只返回一行数据。

  • 索引范围扫描(INDEX RANGE SCAN)

     当谓语中包含将会返回一定范围数据的条件时就会选用索引范围扫描。范围越大,就越有可能会选用全扫描运算来代替它。也有一些情况下你觉得应该使用索引范围扫描,但实际上没有使用。例如,如果你使用一个以通配符开头的条件如'%abc'的LIKE运算符,优化器将不会选用该列上的索引范围扫描,因为条件太宽泛了。另一个类似的情况就是,当你有一个使用组合索引中非引导列的谓语时。在这种情况,将更可能选择使用索引跳跃扫描。

 

      注意:索引范围扫描的最后一个精妙之处在于它能够使用一个升序排列的索引(默认值)来返回降序排列的数据行。

 

  • 索引全表扫描(INDEX FULL SCAN)

 

      有好几种情况下都将会选择索引全扫描,包括:当没有谓语但是所需获取列的列表可以通过其中一列的索引来获得,谓语中包含一个位于索引中非引导列上的条件,或者数据可以通过一个排过序的索引来获取并且会省去单独的排序步骤。索引全扫描运算将会扫描索引结构中的每一个叶子块,读取每个条目的行编号,并取出数据行。每个叶子块都要被访问。这通常比全表扫描效率要高,因为每一个索引块要比表数据块包含更多条目,从而总的需要访问的块数也就相应减少。在查询字段列表中所有字段都是索引条目的一部分的时候,就能够完全跳过访问表的步骤。这就意味着选用索引全扫描比读取所有的表数据块效率更高。

 

       注意:索引全扫描也能够按降序来读取数据(升序数据)以避免进行单独的排序。对于索引全扫描还有另外一个最优方法,当需要查询某一列的最小或最大值而这一列又是索引列的时候。

 

  • 索引跳跃扫描(INDEX SKIP SCAN)

 

      当谓语中包含位于索引中非引导列上的条件,并且引导列的值是唯一 的时候会选择索引跳跃扫描。在早期的ORACLE版本中,如果一个谓语使用了索引中的非引导列,则该索引不能被选用。在9以后的版本中通过引入索引跳跃扫描得到了改变。

 

  • 索引快速全扫描

 

      索引快速全扫描更像全表扫描而不像其它类型的索引扫描。当选用索引快速全扫描时,所有索引块都将通过多块读取来进行。这种类型的索引扫描是用来在查询列表中所有字段都包含在索引中并且索引中至少有一列具有非空约束时替代全表扫描的。在这种情况下,数据通过索引来进行访问而不必访问表数据块。与其他索引扫描类型不同,索引快速全扫描并不能用来避免排序,因为数据块是通过无序的多表读取来的。

 

     总之,索引快速全扫描运算依赖于非空约束的,如果没有这样的约束,将会选择全表扫描。

 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    ORACLE索引详解及SQL优化

    在数据库中,索引类似于书籍的目录,它为数据提供快速访问的途径。Oracle支持多种类型的索引,包括B树索引、位图索引、函数索引和唯一索引等。其中,B树索引是最常见的一种,它通过分层结构快速定位数据行。位图索引...

    Oracle索引详解[PPT]

    索引通过预排序的键值来提供快速的查找途径,避免了全表扫描的低效。本篇内容将深入解析Oracle索引的基本概念、原理以及类型。 首先,索引是可选的表对象,其主要目的是提升查询速度。尽管索引可以显著提高数据检索...

    Oracle索引介绍.pdf

    总结来说,Oracle数据库的索引基于B-Tree数据结构,提供了快速的数据访问途径。聚集索引按照索引顺序存储数据,而非聚集索引则独立于数据存储。理解并熟练运用这两种索引类型,能帮助数据库管理员更好地优化查询性能...

    Oracle--索引的基本操作与存储效率的体验.docx

    Oracle数据库中的索引是提升数据查询效率的关键工具,它们提供了快速访问表中特定记录的途径。索引由表中一列或多列的键值组成,这些键值存储在一个高效的结构,如B树,使得Oracle数据库能迅速定位到相关行。在本...

    NC的Oracle优化及异常数据处理

    创建并使用正确的索引是减少数据访问的重要手段。文档通过案例解释了单列索引和组合索引的作用,并指出在创建复合索引时要注意列的排列顺序和数量限制。 2. 返回更少的数据。通过优化SQL语句,减少返回结果集的大小...

    让Oracle跑得更快2:基于海量数据的数据库设计与.pdf

    海量数据处理的核心在于高效的数据存储和快速的数据访问。对于Oracle数据库而言,这通常涉及到表空间设计、索引结构、分区策略以及数据压缩技术的应用。例如,合理地使用分区可以将大表分割成更小、更易管理的部分,...

    Oracle查询优化4大方面的主要途径

    本文将从四个方面详细介绍Oracle查询优化的主要途径:缓存管理、内存管理、索引管理和连接策略优化。 #### 一、缓存管理 **1. 重用SQL计划** - **解释**:当Oracle在执行SQL语句时,如果该SQL语句已经存在于共享...

    oracle数据执行监控工具(sqldbmon.exe).rar

    通过执行计划,你可以看到索引使用、表扫描类型等,这些都直接影响查询速度。 3. **性能监控**:工具能够实时监控数据库的性能指标,如CPU使用率、I/O等待、会话活动等。这对于识别数据库的负载情况和潜在问题至关...

    如何从优化SQL入手提高数据仓库的ETL效率[以Oracle为例]

    总结来说,优化数据仓库ETL的SQL性能需要深入理解数据仓库的特点,结合实际业务场景,合理使用索引、游标和其他数据库特性。通过这些方法,可以有效提高ETL过程的效率,确保数据仓库能够在限定的时间内完成每日的...

    [Oracle.SQL高级编程].Karen.Morton等.扫描版

    常见的Oracle编程实践包括但不限于表、视图、索引的操作,数据完整性的实现,事务的管理,数据库的备份和恢复,以及性能优化等。 以上知识点为从提供的文件信息中推断出的可能内容。实际文档的具体内容可能会涉及更...

    Oracle性能调优原理及具体手段

    Oracle实例是指运行在计算机上的软件环境,它是访问Oracle数据库的途径。一个实例只能打开一个数据库,并由共享全局区(SGA)和一组后台进程组成。 - **SGA**:是Oracle实例的内存区域,用于存储共享数据和控制信息...

    超酷30个Oracle语句优化规则详解

    通过合理选择优化器模式、利用高效的数据访问方式以及充分利用SQL语句共享机制,可以显著提升Oracle数据库的性能。此外,注意细节如绑定变量的一致性、对象的统一命名等也是优化查询性能的重要因素。希望以上内容对...

    Oracle技术大牛整理文档《Oracle 学习手册》

    - **分区技术**:将数据按照一定的规则分割成多个部分,可以是基于时间、地理位置或其他业务逻辑的划分,以减少查询时扫描的数据量。 - **并行技术**:利用多核处理器或多台服务器同时执行查询的不同部分,从而提高...

    Oracle sql语句优化规则汇总

    这种访问方式特别适用于基于索引列的查询,因为索引提供了ROWID的快速查找途径。 #### 三、SQL语句的共享与重用 为了提高SQL语句的执行效率,Oracle采用了SQL语句共享机制。在首次解析后,SQL语句会被存储在系统...

    oracle常用sql整理

    2. 避免全表扫描:尽可能利用索引,减少对整个表的扫描。 3. 选择合适的JOIN类型:根据数据分布和查询需求选择INNER JOIN、OUTER JOIN或UNION。 4. 使用EXPLAIN PLAN:分析查询执行计划,找出可能的性能瓶颈。 四、...

    oracle10g 概念 oracel concepts

    Oracle 10g是Oracle公司推出的数据库管理系统的一个版本,它提供了强大的数据存储、管理与分析功能。"Oracle Concepts"是Oracle官方文档的一部分,主要讲解了Oracle数据库的基础概念、架构和工作原理,对于学习和...

Global site tag (gtag.js) - Google Analytics