SQL> select * from v$version ;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> create table t_iot ( a varchar2(10),b varchar2(10),vc varchar2(1200), constraint t_iot_pk PRIMARY KEY(a)) ORGANIZATION INDEX;
SQL> create index i_t_iot_b on t_iot(b);
insert into t_iot values ('1' ,'a','a');insert into t_iot values ('22' ,'b','a');insert into t_iot values ('333' ,'c','a');insert into t_iot values ('4444' ,'d','a');insert into t_iot values ('55555' ,'e','a');insert into t_iot values ('666666' ,'f','a');insert into t_iot values ('7777777' ,'g','a');insert into t_iot values ('88888888' ,'h','a');insert into t_iot values ('999999999','i','a');commit ;
SQL> exec dbms_stats.gather_table_stats(ownname=>USER, tabname=>'T_iot');
SQL> SELECT index_name, table_name, blevel, leaf_blocks FROM dba_indexes WHERE table_name = 'T_IOT';
INDEX_NAME TABLE_NAME BLEVEL LEAF_BLOCKS
------------------------------ ------------------------------ ---------- -----------
T_IOT_PK T_IOT 0 1
I_T_IOT_B T_IOT 0 1
--可以发现索引很小,blevel=0,leaf_blocks=1.
SQL> select header_file,header_block from dba_segments where segment_name='T_IOT_PK';
HEADER_FILE HEADER_BLOCK
----------- ------------
4 954
SQL> select object_id,data_object_id from dba_objects where object_name='T_IOT_PK';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
83453 83453
SQL> ALTER SESSION SET EVENTS 'immediate trace name treedump level 83453';
----- begin tree dump
leaf: 0x10003bb 16778171 (0: nrow: 9 rrow: 9)
----- end tree dump
SQL> select header_file,header_block from dba_segments where segment_name='I_T_IOT_B';
HEADER_FILE HEADER_BLOCK
----------- ------------
4 962
SQL> select object_id,data_object_id from dba_objects where object_name='I_T_IOT_B';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
83454 83454
SQL> ALTER SESSION SET EVENTS 'immediate trace name treedump level 83454';
----- begin tree dump
leaf: 0x10003c3 16778179 (0: nrow: 9 rrow: 9)
----- end tree dump
仅仅占用1个块。HEADER_BLOCK=962,根节点=963.
SQL> alter system dump datafile 4 block 963 ;
SQL> set autotrace traceonly ;
SQL> select a from t_iot where b='a';
Execution Plan
----------------------------------------------------------
Plan hash value: 3946844304
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 8 | 1 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| I_T_IOT_B | 1 | 8 | 1 (0)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("B"='a')SQL> select vc from t_iot where b='a';
Execution Plan
----------------------------------------------------------
Plan hash value: 1095339046
-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 4 | 1 (0)| 00:00:01 |
|* 1 | INDEX UNIQUE SCAN| T_IOT_PK | 1 | 4 | 1 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN| I_T_IOT_B | 1 | | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("B"='a') 2 - access("B"='a')Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
519 bytes sent via SQL*Net to client
519 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> column vc format a30
SQL> select rowid,a.* from t_iot a;
ROWID A B VC
------------------------- ---------- ---------- ------------------------------
*BAEAA7sBMf4 1 a a
*BAEAA7sCMjL+ 22 b a
*BAEAA7sDMzMz/g 333 c a
*BAEAA7sENDQ0NP4 4444 d a
*BAEAA7sFNTU1NTX+ 55555 e a
*BAEAA7sGNjY2NjY2/g 666666 f a
*BAEAA7sHNzc3Nzc3N/4 7777777 g a
*BAEAA7sIODg4ODg4ODj+ 88888888 h a
*BAEAA7sJOTk5OTk5OTk5/g 999999999 i a
9 rows selected.
SQL> column x format a70
SQL> select dump(rowid) x,rowid,a,b from t_iot ;
X ROWID A B
---------------------------------------------------------------------- ------------------------- ---------- ----------
Typ=208 Len=9: 2,4,1,0,3,187,1,49,254 *BAEAA7sBMf4 1 a
Typ=208 Len=10: 2,4,1,0,3,187,2,50,50,254 *BAEAA7sCMjL+ 22 b
Typ=208 Len=11: 2,4,1,0,3,187,3,51,51,51,254 *BAEAA7sDMzMz/g 333 c
Typ=208 Len=12: 2,4,1,0,3,187,4,52,52,52,52,254 *BAEAA7sENDQ0NP4 4444 d
Typ=208 Len=13: 2,4,1,0,3,187,5,53,53,53,53,53,254 *BAEAA7sFNTU1NTX+ 55555 e
Typ=208 Len=14: 2,4,1,0,3,187,6,54,54,54,54,54,54,254 *BAEAA7sGNjY2NjY2/g 666666 f
Typ=208 Len=15: 2,4,1,0,3,187,7,55,55,55,55,55,55,55,254 *BAEAA7sHNzc3Nzc3N/4 7777777 g
Typ=208 Len=16: 2,4,1,0,3,187,8,56,56,56,56,56,56,56,56,254 *BAEAA7sIODg4ODg4ODj+ 88888888 h
Typ=208 Len=17: 2,4,1,0,3,187,9,57,57,57,57,57,57,57,57,57,254 *BAEAA7sJOTk5OTk5OTk5/g 999999999 i
9 rows selected.
SQL> select dump(rowid,16) x,rowid,a,b from t_iot ;
X ROWID A B
---------------------------------------------------------------------- ------------------------- ---------- ----------
Typ=208 Len=9: 2,4,1,0,3,bb,1,31,fe *BAEAA7sBMf4 1 a
Typ=208 Len=10: 2,4,1,0,3,bb,2,32,32,fe *BAEAA7sCMjL+ 22 b
Typ=208 Len=11: 2,4,1,0,3,bb,3,33,33,33,fe *BAEAA7sDMzMz/g 333 c
Typ=208 Len=12: 2,4,1,0,3,bb,4,34,34,34,34,fe *BAEAA7sENDQ0NP4 4444 d
Typ=208 Len=13: 2,4,1,0,3,bb,5,35,35,35,35,35,fe *BAEAA7sFNTU1NTX+ 55555 e
Typ=208 Len=14: 2,4,1,0,3,bb,6,36,36,36,36,36,36,fe *BAEAA7sGNjY2NjY2/g 666666 f
Typ=208 Len=15: 2,4,1,0,3,bb,7,37,37,37,37,37,37,37,fe *BAEAA7sHNzc3Nzc3N/4 7777777 g
Typ=208 Len=16: 2,4,1,0,3,bb,8,38,38,38,38,38,38,38,38,fe *BAEAA7sIODg4ODg4ODj+ 88888888 h
Typ=208 Len=17: 2,4,1,0,3,bb,9,39,39,39,39,39,39,39,39,39,fe *BAEAA7sJOTk5OTk5OTk5/g 999999999 i
9 rows selected.
SQL> column name format a30
SQL> column value format 999999999
SQL> SELECT n.name, s.value FROM v$mystat s, v$statname n WHERE s.statistic# = n.statistic# AND lower(n.name) like '%leaf%';
NAME VALUE
------------------------------ ----------
leaf node splits 0
leaf node 90-10 splits 0
SQL> update t_iot set vc=lpad('a',1000,'a') ;
9 rows updated.
SQL> SELECT n.name, s.value FROM v$mystat s, v$statname n WHERE s.statistic# = n.statistic# AND lower(n.name) like '%leaf%';
NAME VALUE
------------------------------ ----------
leaf node splits 1
leaf node 90-10 splits 0
SQL> commit;
SQL> select dump(rowid,16) x,rowid,a,b from t_iot ;
X ROWID A B
---------------------------------------------------------------------- ------------------------- ---------- ----------
Typ=208 Len=9: 2,4,1,0,3,bd,1,31,fe *BAEAA70BMf4 1 a
Typ=208 Len=10: 2,4,1,0,3,bd,2,32,32,fe *BAEAA70CMjL+ 22 b
Typ=208 Len=11: 2,4,1,0,3,bd,3,33,33,33,fe *BAEAA70DMzMz/g 333 c
Typ=208 Len=12: 2,4,1,0,3,bd,4,34,34,34,34,fe *BAEAA70ENDQ0NP4 4444 d
Typ=208 Len=13: 2,4,1,0,3,bd,5,35,35,35,35,35,fe *BAEAA70FNTU1NTX+ 55555 e
Typ=208 Len=14: 2,4,1,0,3,bd,6,36,36,36,36,36,36,fe *BAEAA70GNjY2NjY2/g 666666 f
Typ=208 Len=15: 2,4,1,0,3,be,7,37,37,37,37,37,37,37,fe *BAEAA74HNzc3Nzc3N/4 7777777 g
Typ=208 Len=16: 2,4,1,0,3,be,8,38,38,38,38,38,38,38,38,fe *BAEAA74IODg4ODg4ODj+ 88888888 h
Typ=208 Len=17: 2,4,1,0,3,be,9,39,39,39,39,39,39,39,39,39,fe *BAEAA74JOTk5OTk5OTk5/g 999999999 i
9 rows selected.
SQL> set autotrace traceonly
SQL> select substr(vc,1,20) from t_iot where b='a';
Execution Plan
----------------------------------------------------------
Plan hash value: 1095339046
-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 4 | 1 (0)| 00:00:01 |
|* 1 | INDEX UNIQUE SCAN| T_IOT_PK | 1 | 4 | 1 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN| I_T_IOT_B | 1 | | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("B"='a')
2 - access("B"='a')
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
4 consistent gets
0 physical reads
0 redo size
551 bytes sent via SQL*Net to client
519 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> alter index i_t_iot_b rebuild ;
Index altered.
SQL> select header_file,header_block from dba_segments where segment_name='I_T_IOT_B';
HEADER_FILE HEADER_BLOCK
----------- ------------
4 970
SQL> select object_id,data_object_id from dba_objects where object_name='I_T_IOT_B';
OBJECT_ID DATA_OBJECT_ID
---------- --------------
83454 83455
SQL> exec dbms_stats.gather_table_stats(ownname=>USER, tabname=>'T_iot');
PL/SQL procedure successfully completed.
SQL> SELECT index_name, table_name, blevel, leaf_blocks FROM dba_indexes WHERE table_name = 'T_IOT';
INDEX_NAME TABLE_NAME BLEVEL LEAF_BLOCKS
------------------------------ ------------------------------ ---------- -----------
T_IOT_PK T_IOT 1 2
I_T_IOT_B T_IOT 0 1
SQL> ALTER SESSION SET EVENTS 'immediate trace name treedump level 83454';
Session altered.
----- begin tree dump
leaf: 0x10003cb 16778187 (0: nrow: 9 rrow: 9)
----- end tree dump
SQL> set autotrace traceonly
SQL> select substr(vc,1,20) from t_iot where b='a';
Execution Plan
----------------------------------------------------------
Plan hash value: 1095339046
-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1003 | 1 (0)| 00:00:01 |
|* 1 | INDEX UNIQUE SCAN| T_IOT_PK | 1 | 1003 | 1 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN| I_T_IOT_B | 1 | | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("B"='a') 2 - access("B"='a')
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
551 bytes sent via SQL*Net to client
519 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-717272/ ,如需转载,请注明出处,否则将追究法律责任。