【基礎篇一致性讀】一致性讀分析(三)

yellowlee發表於2010-07-24

pub的兄弟問到index full scan的一致性讀怎麼計算,這裡簡單推一下,其實怎麼算的倒是無所謂了,理解了各種訪問方式原理就可以了,大致過程和分析如下:

SQL> show arraysize

arraysize 15

SQL> set autot traceonly;

SQL> create table t_test_ifc as select * from dba_objects a ;

 

表已建立。

 

SQL> create index ind_test_ifc1 on t_test_ifc(object_id) ;

 

索引已建立。

 

SQL>

SQL> update sys.t_test_ifc a set a.object_id = 1 where a.object_id is null ;

 

已更新 1 行。

SQL> select /*+ index(a)*/* from sys.t_test_ifc a

  2  ;

 

已選擇59670行。

 

 

執行計劃

----------------------------------------------------------

Plan hash value: 3916597050

 

--------------------------------------------------------------------------------

 

-------------

 

| Id  | Operation                   | Name          | Rows  | Bytes | Cost (%CPU

 

)| Time     |

 

--------------------------------------------------------------------------------

 

-------------

 

|   0 | SELECT STATEMENT            |               | 63946 |    10M|  1018   (1

 

)| 00:00:13 |

 

|   1 |  TABLE ACCESS BY INDEX ROWID| T_TEST_IFC    | 63946 |    10M|  1018   (1

 

)| 00:00:13 |

 

|   2 |   INDEX FULL SCAN           | IND_TEST_IFC1 | 63946 |       |   135   (2

 

)| 00:00:02 |

 

--------------------------------------------------------------------------------

 

-------------

 

 

Note

-----

   - dynamic sampling used for this statement

 

 

統計資訊

----------------------------------------------------------

          0  recursive calls

          0  db block gets

       8911  consistent gets

        126  physical reads

          0  redo size

    6391010  bytes sent via SQL*Net to client

      44132  bytes received via SQL*Net from client

       3979  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

      59670  rows processed

 

SQL>

 

SQL> select a.index_name,

  2         a.index_type,

  3         a.blevel,

  4         a.leaf_blocks,

  5         a.distinct_keys,

  6         a.clustering_factor,

  7         a.num_rows

  8    from dba_indexes a

  9   where a.table_name = upper('t_test_ifc');

 

INDEX_NAME                     INDEX_TYPE                      BLEVEL LEAF_BLOCKS DISTINCT_KEYS CLUSTERING_FACTOR   NUM_ROWS

------------------------------ --------------------------- ---------- ----------- ------------- ----------------- ----------

IND_TEST_IFC1                  NORMAL                               1         132         59669               878      59669

 

SQL> select (59669/15)*2+817+132 from dual;

 

(59669/15)*2+817+132

--------------------

    8904.86666666667

 

817是表的塊數,132leaf block數,index full scan是掃描全部的葉塊。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-668900/,如需轉載,請註明出處,否則將追究法律責任。

相關文章