几种索引扫描方式

几种索引扫描方式

几种索引扫描方式

1)索引唯一扫描 如果查询时是通过unique或primary key约束来保证只返回一条数据,那么优化器就会选择索引唯一扫描,这是访问一条数据的最快方式。

2)索引范围扫描

索引键非唯一,当遇到如下条件时会使用索引范围扫描:

1.col=:b1

2.col<:b1

3.col>:b1

3)索引降序范围扫描

与2)中的情况相同,只不过2)默认是安装 升序进行查找的,而这里是按降序进行查找,如:

select line_item_id,order_id from order_items where order_id<:b1 order by order_id desc;

4) 跳跃式索引(Skip Scan Index)。当表有一个复合索引,而在查询中有除了索引中第一列的其他列作为条件,并且优化器模式为CBO,这时候查询计划就有可能使用到SS,另外通 过使用提示index_ss(CBO下)来强制使用SS。跳跃式索引使复合索引从逻辑上分为几个小的子索引,分的条件就是复合索引列的第一个字段,可以这 样理解,Oracle 将索引从逻辑上划分为a.num_distinct个子索引,每次对一个子索引进行扫描。因此SS的索引扫描成本为a.num_distinct.而且使用SS的条件需要第一列的distinct num要足够小

5)index full scan和Index Fast Full Scan(全索引扫描和快速全索引扫描)

index full scan和index fast full scan是指同样的东西吗?答案是no。两者虽然从字面上看起来差不多,但是实现的机制完全不同。我们一起来看看两者的区别在哪里?

首先来看一下IFS,FFS能用在哪里:在一句sql 中,如果我们想搜索的列都包含在索引里面的话,那么index full scan 和 index fast full scan 都可以被采用代替full table scan。比如以下语句:

SQL> CREATE TABLE TEST AS SELECT * FROM dba_objects WHERE 0=1;

SQL> CREATE INDEX ind_test_id ON TEST(object_id);

SQL> INSERT INTO TEST

SELECT *

几种索引扫描方式相关文档

最新文档

返回顶部