【索引】索引五种扫描方式至索引快速全扫描

索引快速全扫描和索引全扫描是有很大区别的。

关键是如何理解“快速”二字。

索引全扫描是根据索引叶子节点之间的链表(实际上是双向链表)来从一段逐个读取节点到另一端来扫描的。

而快速全扫描,也是要对索引段进行全量访问,只是扫描的方式不是按照链表的指向来一个一个地读取叶子节点。

而是直接从段头块里读取到索引的hwm,然后读取hwm之下的所以数据块内容,这个读取就是直接进行多块读取(全扫描有点像单块读)。

SQL> select count(empno) from emp;


COUNT(EMPNO)
------------
          14




执行计划
----------------------------------------------------------
Plan hash value: 2937609675


-------------------------------------------------------------------
| Id  | Operation        | Name   | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |     1 |     1   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE  |        |     1 |            |          |
|   2 |   INDEX FULL SCAN| PK_EMP |    14 |     1   (0)| 00:00:01 |
-------------------------------------------------------------------




统计信息
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          1  consistent gets
          0  physical reads
          0  redo size
        427  bytes sent via SQL*Net to client
        416  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


SQL>

咋个是索引全扫描呢?应该是索引快速全扫描的。估计和数据量有关。

SQL> select count(ACCEPT_ID) from cct_log_secondcsc_201409;


COUNT(ACCEPT_ID)
----------------
           87835


执行计划
----------------------------------------------------------
Plan hash value: 2227991016


--------------------------------------------------------------------------------
| Id  | Operation             | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |        |     1 |    14 |    86   (2)| 00:00:02 |
|   1 |  SORT AGGREGATE       |        |     1 |    14 |            |          |
|   2 |   INDEX FAST FULL SCAN| IDX222 | 88075 |  1204K|    86   (2)| 00:00:02 |
--------------------------------------------------------------------------------




统计信息
----------------------------------------------------------
          1  recursive calls
          0  db block gets
        315  consistent gets
        309  physical reads
          0  redo size
        433  bytes sent via SQL*Net to client
        416  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


SQL>

ACCEPT_ID上有一个普通索引。


根据试验可知,CBO认为,index full scan的效率还是要高过index fast full scan。

你可能感兴趣的:(Oracle数据库-管理)