索引高度相关

建表并插入数据
SQL> create table t1 as select rownum as id ,rownum+1 as id2,rpad('*',1000,'*') as contents from dual connect by level<=1;
Table created.
SQL> create table t2 as select rownum as id ,rownum+1 as id2,rpad('*',1000,'*') as contents from dual connect by level<=10;
Table created.
SQL> create table t3 as select rownum as id ,rownum+1 as id2,rpad('*',1000,'*') as contents from dual connect by level<=100;
Table created.
SQL> create table t4 as select rownum as id ,rownum+1 as id2,rpad('*',1000,'*') as contents from dual connect by level<=1000;
Table created.
SQL> create table t5 as select rownum as id ,rownum+1 as id2,rpad('*',1000,'*') as contents from dual connect by level<=10000;
Table created.
SQL> create table t6 as select rownum as id ,rownum+1 as id2,rpad('*',1000,'*') as contents from dual connect by level<=100000;
Table created.
SQL> create table t7 as select rownum as id ,rownum+1 as id2,rpad('*',1000,'*') as contents from dual connect by level<=1000000;
Table created.

建立索引
SQL> create index idx_id_t1 on t1(id);
Index created.
SQL> create index idx_id_t2 on t2(id);
Index created.
SQL> create index idx_id_t3 on t3(id);
Index created.
SQL> create index idx_id_t4 on t4(id);
Index created.
SQL> create index idx_id_t5 on t5(id);
Index created.
SQL> create index idx_id_t6 on t6(id);
Index created.
SQL> create index idx_id_t7 on t7(id);
Index created.

SQL> set linesize 1000
SQL> set autotrace off
SQL> select index_name,
  2            blevel,
  3            leaf_blocks,
  4            num_rows,
  5            distinct_keys,
  6            clustering_factor
  7       from user_ind_statistics
  8      where table_name in( 'T1','T2','T3','T4','T5','T6','T7');


INDEX_NAME                         BLEVEL LEAF_BLOCKS   NUM_ROWS DISTINCT_KEYS CLUSTERING_FACTOR                                                                                                                                                                                                                                                                                                                              
------------------------------ ---------- ----------- ---------- ------------- -----------------                                                                                                                                                                                                                                                                                       
IDX_ID_T1                               0           1          1             1                 1                                                                                                                                                                                                             
IDX_ID_T2                               0           1         10            10                 2                                                                                                                                                                                                             
IDX_ID_T3                               0           1        100           100                15                                                                                                                                                                                                           
IDX_ID_T4                               1           3       1000          1000               143                                                                                                                                                                                                        
IDX_ID_T5                               1          21      10000         10000              1429                                                                                                                                                                                                   
IDX_ID_T6                               1         222     100000        100000             14286                                                                                                                                                                                                 
IDX_ID_T7                               2        2226    1000000       1000000            142858    


1千万条记录是3层高度。
所以一般数据量1000w条以内的记录条数,不用怎么考虑索引高度。

SQL> select * from t1 where id=1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          2  consistent gets

SQL> select /*+full(t1)*/ * from t1 where id=1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          3  consistent gets  

SQL> select  * from t2 where id =1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          3  consistent gets

SQL> select /*+full(t2)*/ * from t2 where id =1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          5  consistent gets

SQL> select * from t3 where id=1;

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          3  consistent gets
      
SQL> select /*+full(t3)*/ * from t3 where id=1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         19  consistent gets

SQL> select * from t4 where id=1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          4  consistent gets

SQL> select /*+full(t4)*/ * from t4 where id=1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        148  consistent gets

SQL> select * from t5 where id=1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          4  consistent gets
SQL> select /*+full(t5)*/ * from t5 where id=1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       1435  consistent gets

SQL> select * from t6 where id=1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          4  consistent gets
SQL> select /*+full(t6)*/ * from t6 where id=1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
      14291  consistent gets

SQL> select * from t7 where id=1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          5  consistent gets

SQL> select /*+full(t7)*/ * from t7 where id=1;
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
     142866  consistent gets

/*
规律:
  从t1到t7(表记录依次增大10倍,从1到1000000),索引读的逻辑读是     2,3,3,4,4,4,5
  从t1到t7(表记录依次增大10倍,从1到1000000)全表扫描的逻辑读是    3,5,19,148,1435,14291,142866  
*/  

请使用浏览器的分享功能分享到微信等