今天看到个帖子,关于索引中是否包含ROWID,做个DUMP跟踪下看,以下为详细的跟踪记录:
SQL> create table test as select rownum a ,'c' c from dual connect by level<101;
Table created
SQL> create index u_test on test(a);
Index created
SQL> select extent_id,file_id,block_id from dba_extents where segment_name='U_TEST';
EXTENT_ID FILE_IDBLOCK_ID
---------- ---------- ----------
0 6 121
SQL> alter system dump datafile 6 block 121; --assm自动段管理位图占3个块,跳3个块
System altered
SQL> alter system dump datafile 6 block 124;
System altered
以下部分跟踪记录:
row#0[8024] flag: ------, lock: 0, len=12
col 0; len 2; (2): c1 02 ----------------索引键值
col 1; len 6; (6): 01 80 00 74 00 00 -----------------------rowid
row#1[8012] flag: ------, lock: 0, len=12
col 0; len 2; (2): c1 03
col 1; len 6; (6): 01 80 00 74 00 01
row#2[8000] flag: ------, lock: 0, len=12
col 0; len 2; (2): c1 04
col 1; len 6; (6): 01 80 00 74 00 02
SQL> create unique index u_test on test(a);
Index created
SQL> select extent_id,file_id,block_id from dba_extents where segment_name='U_TEST';
EXTENT_ID FILE_IDBLOCK_ID
---------- ---------- ----------
0 6 121
SQL> alter system dump datafile 6 block 124;
以下部分跟踪记录:
row#0[8025] flag: ------, lock: 0, len=11, data:(6):01 80 00 74 00 00
col 0; len 2; (2): c1 02
row#1[8014] flag: ------, lock: 0, len=11, data:(6):01 80 00 74 00 01
col 0; len 2; (2): c1 03
row#2[8003] flag: ------, lock: 0, len=11, data:(6):01 80 00 74 00 02
col 0; len 2; (2): c1 04
row#3[7992] flag: ------, lock: 0, len=11, data:(6):01 80 00 74 00 03
如上所示:唯一索引不包含ROWID,普通索引包含rowid.
更多其他oracle内容,参见:
http://blog.youkuaiyun.com/thy822/article/details/6416390