zoukankan      html  css  js  c++  java
  • 为什么不走INDEX FAST FULL SCAN呢

     INDEX FULL SCAN 索引全扫描。单块读 。它扫描的结果是有序的,因为索引是有序的。它通常发生在     
                                            下面几种情况(注意:即使SQL满足以下情况 不一定会走索引全扫描)
                                           1. SQL语句有order by选项,并且order by 的列都包含
                                            在索引中,并且order by 后列顺序必须和索引列顺序一致。
                                           2. 在进行SORT MERGE JOIN的时候,如果要查询的列通过索 
                                              引就能获得,那就不必进行全表扫描了,另外也避免了排
                                              序,因为INDEX FULL SCAN返回的结果已经排序。
                                           3. 当查询中有GROUP BY,并且GROUP BY 的列包含在索引中。
                                   等待事件:db file sequential read
                                   HINT: INDEX(表名/别名 索引名)
       INDEX FAST FULL SCAN 索引快速全扫描。多块读 。当SQL要查询的数据能够完全从索引中获得,那么
                                                     Oracle就不会走全表扫描了,就会走索引快速全
                                                     扫描。索引快速全扫描类似全表扫描,它可以多块 
                                                     读,并且可以并行扫描。
                                   等待事件:db file scattered read
                                   HINT:INDEX_FFS(表名/别名 索引名) 
    
    测试INDEX FAST FULL SCAN:
    create table test as select * from dba_objects;
    
    
    create index test_idx1 on test(object_name);
    
    BEGIN
      DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'HR',
                                    tabname          => 'TEST',
                                    estimate_percent => 30,
                                    method_opt       => 'for all columns size repeat',
                                    no_invalidate    => FALSE,
                                    degree           => 8,
                                    cascade          => TRUE);
    END;
    
    
    
    
    SQL>  select object_name from test where object_name is not null and owner='SYS';
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 1357081020
    
    --------------------------------------------------------------------------
    | Id  | Operation	  | Name | Rows  | Bytes | Cost (%CPU)| Time	 |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |	 | 40056 |  1212K|  4689   (1)| 00:00:57 |
    |*  1 |  TABLE ACCESS FULL| TEST | 40056 |  1212K|  4689   (1)| 00:00:57 |
    --------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - filter("OWNER"='SYS' AND "OBJECT_NAME" IS NOT NULL)
    
    
    为什么不走INDEX FAST FULL SCAN呢?
    
    
    因为test_idx1只存放了(object_name)的数据,但是没有存放OWNER的数据,索引无法过滤OWENR='SYS'部分数据,只能访问表来过滤。
    
    
    
    create index test_idx2 on test(object_name,owner)
    
    SQL>  select object_name from test where object_name is not null and owner='SYS';
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 2636476231
    
    ----------------------------------------------------------------------------------
    | Id  | Operation	     | Name	 | Rows  | Bytes | Cost (%CPU)| Time	 |
    ----------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT     |		 | 40056 |  1212K|  1822   (1)| 00:00:22 |
    |*  1 |  INDEX FAST FULL SCAN| TEST_IDX2 | 40056 |  1212K|  1822   (1)| 00:00:22 |
    ----------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - filter("OWNER"='SYS' AND "OBJECT_NAME" IS NOT NULL
    
    此时走INDEX FAST FULL SCAN


     

  • 相关阅读:
    让Android模拟器速度飞起来_Eclipse+BlueStacks调试Android应用【2012-10-30】
    开源镜像站-Android镜像
    字符编码的几篇文章
    [C/C++]_[Unicode转Utf8,Ansi转Unicode,Ansi文件转Utf8文件]
    MSVC下快速Unicode I/O
    edltplus使用正则表达式替换多余空行
    修改CMD的编码
    windows 安裝 gcc 編譯器
    CF369 C(递归 + 回溯)
    VIM支持系统剪切板
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/3798084.html
Copyright © 2011-2022 走看看