Oracle CBO优化模式中索引访问方法详解

1 下载量 12 浏览量 更新于2024-08-28 收藏 91KB PDF 举报
Oracle CBO 优化模式中的 5 种索引访问方法浅析 Oracle 的 Cost-Based Optimizer(CBO)是一种自适应优化器,它可以根据不同的数据分布和查询模式选择最优的执行计划。索引访问方法是 CBO 中的一种重要优化策略,本文将对 CBO 优化模式中的 5 种索引访问方法进行浅析。 索引唯一扫描(INDEX UNIQUE SCAN) 索引唯一扫描是一种高效的索引访问方法,它可以快速地定位到特定的数据行。这种方法通常在查询谓语中使用 UNIQUE 和 PRIMARY KEY 索引的列作为条件时会被选用。索引唯一扫描的特点是对于某个特定的值只返回一行数据,访问的高度总是索引的高度加一,除了某些特殊的情况,如另外存储的 LOB 对象。 例如,在查询谓语中使用 employee_id = 100 时,Oracle 会选择索引唯一扫描,因为 employee_id 是一列 PRIMARY KEY 索引。执行计划如下所示: Execution Plan ———————————————————- Plan hash value: 1833546154 ——————————————————————————————— | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ——————————————————————————————— | 0 | SELECT STATEMENT | | 1 | 69 | 1 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID | EMPLOYEES | 1 | 69 | 1 (0)| 00:00:01 | |* 2 | INDEX UNIQUE SCAN | EMP_EMP_ID_PK | 1 | | 0 (0)| 00:00:01 | ——————————————————————————————— Predicate Information (identified by operation id): 2 - access("EMPLOYEE_ID"=100) 索引范围扫描(INDEX RANGE SCAN) 索引范围扫描是一种常用的索引访问方法,通常在查询谓语中包含范围条件时会被选用。索引可以是唯一的亦可以是不唯一的。所指定的条件可以是 (<, >, LIKE, BETWEEN, =) 等运算符,但是使用 LIKE 时,如果使用了通配符%,极有可能就不会使用范围扫描,因为条件过于宽泛了。 例如,在查询谓语中使用 employee_id > 100 AND employee_id < 200 时,Oracle 会选择索引范围扫描。 索引全扫描(INDEX FULL SCAN) 索引全扫描是一种索引访问方法,它会扫描整个索引以便获取所有的数据。这种方法通常在查询谓语中没有指定任何条件时会被选用。索引全扫描的特点是访问的高度总是索引的高度加一,除了某些特殊的情况,如另外存储的 LOB 对象。 索引跳跃扫描(INDEX SKIP SCAN) 索引跳跃扫描是一种索引访问方法,它可以跳过某些索引块以便快速地定位到特定的数据行。这种方法通常在查询谓语中使用了 NOT EXISTS 或 NOT IN 语句时会被选用。 索引快速全扫描(INDEX FAST FULL SCAN) 索引快速全扫描是一种索引访问方法,它可以快速地扫描整个索引以便获取所有的数据。这种方法通常在查询谓语中没有指定任何条件时会被选用。 Oracle CBO 优化模式中的 5 种索引访问方法各有其特点和应用场景,了解这些方法可以帮助我们更好地优化 SQL 查询语句,提高查询效率。
2011-11-25 上传