在查看SQL的执行计划的时候,有时候会看到INDEX SKIP SCAN,其实这个索引扫描路径会发生在多个列建立的复合索引上,如果SQL中谓词条件只包含索引中的部分列,并且这些列不是建立索引时的第一列时,就可 能发生INDEX SKIP SCAN。这里SKIP的意思是因为查询条件没有第一列或前面几列,被忽略了。
引用Oracle文档的例子,比如如下的表:
employees (sex, employee_id, address)
建立如下索引:
(sex, employee_id)
如果索引包含如下的数据:
('F',98)
('F',100)
('F',102)
('F',104)
('M',101)
('M',103)
('M',105)
索引结构图示如下:
这时如果我们执行以下查询就会触发走INDEX SKIP SCAN:
SELECT *
FROM employees
WHERE employee_id = 101;
这里sex就会被忽略掉了,实际上Oracle并没有真正忽略,而是在逻辑上拆分为2个子索引来查询而已。
分享到:
相关推荐
sql学习 07.INDEX SKIP SCAN.sql
MySQL 8.0.13开始支持 index skip scan 也即索引跳跃扫描。该优化方式支持那些SQL在不符合组合索引最左前缀的原则的情况,优化器依然能组使用组合索引。 talk is cheap ,show me the code 实践 使用官方文档的例子...
对于联合索引,INDEX SKIP SCAN 可以跳过某些列,当查询的条件在索引的后续列时非常有用。例如,如果有 `(column1, column2)` 的联合索引,而查询条件只涉及到 `column2`,数据库可以跳过 `column1`,直接在 `...
4.索引跳跃扫描(INDEX SKIP SCAN) 5.索引快速全扫描(INDEX FAST FULL SCAN) 索引唯一扫描(INDEX UNIQUE SCAN) 通过这种索引访问数据的特点是对于某个特定的值只返回一行数据,通常如果在查询谓语中使用UNIQE和...
假设`object_name`和`object_type`上有一个复合索引,且查询仅涉及`object_type`列,那么Oracle可能会采用INDEX SKIP SCAN来提高查询效率。 ### 6. SCAN DESCENDING(降序扫描) 当查询需要按照索引的逆序返回结果...
MySQL中的 Loose Index Scan 是一种查询优化策略,它与Oracle的Index Skip Scan类似,主要用于提高查询效率,特别是处理涉及`GROUP BY`和`DISTINCT`操作的复杂查询时。在InnoDB存储引擎中,由于索引组织表(IOT,...
Oracle 9i 引入了一项名为索引跳跃扫描(Index Skip Scan)的创新特性,这一特性显著提升了针对特定查询场景的性能,尤其是在处理连接索引和多值索引的查询时。传统的索引通常依赖于查询语句中完全匹配索引的所有列...
当REPORT_DATE是分区条件且后面跟的都是唯一值时,理想的执行计划应该是Index Skip Scan,因为它能直接定位到具体的分区和相关的行,而避免了大量无谓的数据扫描。 - 但是,如果执行计划选择了Index Range Scan,它...
5. **INDEX SKIP SCAN**:在联合索引中,如果前几列的值相同,但后续列的值不同,数据库会跳过相同的前导列,直接找到不同值的记录。 6. **SCAN DESCENDING**:用于降序扫描,例如在ORDER BY子句中指定列的降序排列...
- **B树索引扫描**:包括`INDEX UNIQUE SCAN`、`INDEX RANGE SCAN`、`INDEX FULL SCAN`、`INDEX FAST FULL SCAN`和`INDEX SKIP SCAN`。其中,`INDEX FULL SCAN (MIN/MAX)`是一种特殊的扫描方式,用于高效获取索引的...
五、索引跳跃扫描(Index Skip Scan) 索引跳跃扫描是一种使用索引来访问表的方式。它跳过索引中的一些记录,以找到匹配的记录。索引跳跃扫描通常用于以下情况: * 查询条件包含索引列,但不是唯一索引。 * 需要...
3. Index skip scan:对于范围查询,Oracle可以跳过部分索引节点,提高查询效率。 四、索引使用策略 1. 适当索引:为经常出现在WHERE子句中的列创建索引,避免对更新频繁的列建索引。 2. 分析与调整:定期运行`...
1. **INDEX SKIP SCAN**: 当创建了一个组合索引,但是查询只使用了索引的非第一列时,Oracle可能会选择不使用索引,因为它无法直接通过索引来定位数据。INDEX SKIP SCAN是一种优化策略,允许数据库跳过索引的第一个...
- **跳过扫描**(Index Skip Scan):对于包含范围条件和索引列的并集查询,跳过不匹配的索引块。 4. **快速全索引扫描**(Fast Full Index Scan):CBO模式下,对整个索引进行扫描,但不通过表。 5. **索引连接**...
|* 1 | INDEX UNIQUE SCAN| IDX_A_ID | 1 | 13 | 1 (0)| 00:00:01 | ---------------------------------------------------------- Predicate Information (identified by operation id): -------------------------...
- **索引跳跃式扫描(Index Skip Scan)**:在多列索引中跳过部分索引项,适用于部分列有索引,部分列无索引的情况。 - **索引全扫描(Index Full Scan)**:遍历整个索引,通常在全表扫描比索引扫描更优时发生。 ...
优化器在连接表的同时,还要选择访问单表的最佳方式,包括全表扫描、索引扫描(Index unique scan、index range scan、index full scan、index fast full scan、index skip scan)。选择哪种方式取决于数据分布、...
5. **`INDEX SKIP SCAN`**:用于跨越多个索引分区进行搜索,特别适合于分区索引。 6. **`SCAN DESCENDING`**:按照降序顺序扫描索引。 7. **`INDEX JOIN`**:当查询涉及到多个表时,索引联接可以提高性能。 8. **`...
3. Index Skip Scan:学习如何利用Oracle的Index Skip Scan技术提高多列索引的查询效率。 四、表设计与分区 1. 表空间管理:合理分配和管理表空间,避免空间碎片,提升I/O效率。 2. 表设计:遵循正常化原则,同时...