这节将介绍各种索引扫描方式,在了解了各种索引扫描方式的特点后,你就可以判断你的执行计划中使用的扫描方式是否正确,并可以针对获取的信息作出改进。
索引唯一扫描
在下面的场景中使用相等条件时,数据库使用索引唯一扫描。
1)查询条件中包含唯一索引中的所有列时;
2)查询条件使用主键约束列时。
下面是一个实际的例子,在表historyalarm中创建如下唯一索引:
create unique index idx_historyalarm$queryid on historyalarm(queryid) tablespace uep4x_fm_index
然后在表上执行查询:
select * from historyalarm where queryid = 3
该查询符合上面的第一种情况,会使用索引唯一扫描,该查询的执行计划如下:
DESCRIPTION OBJECT NAME
-----------------------------------------------------------------------
SELECT STATEMENT, GOAL = ALL_ROWS
TABLE ACCESS BY GLOBAL INDEX ROWID HISTORYALARM
INDEX UNIQUE SCAN IDX_HISTORYALARM$QUERYID
这里Oracle首先通过唯一索引扫描找到索引节点,然后使用索引节点中包含的rowid来访问表中的数据。
索引范围扫描
当查询