ITPub博客

首页 > 数据库 > Oracle > 深入理解Oracle索引(3):唯一索引和ROWID

深入理解Oracle索引(3):唯一索引和ROWID

原创 Oracle 作者:幕南风 时间:2014-07-03 13:46:09 0 删除 编辑
       索引都会包含rowid来定位到具体的位置,但是唯一索引不会用rowid来作为“索引键”的一部分
       比如在列col1上建立非唯一索引,则其索引键是col1| rowid,这样索引键就唯一了,但唯一索引不会在列上加上rowid构成索引键
       

       测试:

SQL> conn / as sysdba
已连接。
SQL> create table t as select * from dba_objects;

表已创建。

SQL> create index t_idx on t(object_id);

索引已创建。

SQL> select t.header_file,t.header_block from dba_segments t
  2   where t.segment_name=\'T\';

HEADER_FILE HEADER_BLOCK
----------- ------------
          1        58408

SQL> alter system dump datafile 1 block 58410;

系统已更改。

普通索引,内容如下:
row#0[8024] flag: ------, lock: 0, len=12
col 0; len 2; (2):  c1 03
col 1; len 6; (6):  00 40 e4 29 00 30

SQL> drop index t_idx;

索引已删除。

SQL> create unique index t_idx on t(object_id);

索引已创建。

SQL> select t.header_file,t.header_block from dba_segments t
  2   where t.segment_name=\'T_IDX\';

HEADER_FILE HEADER_BLOCK
----------- ------------
          1        92136

SQL> alter system dump datafile 1 block 92138;

系统已更改。

SQL>

唯一索引,内容如下:
row#0[8025] flag: ------, lock: 0, len=11, data:(6):  00 40 e4 29 00 30
col 0; len 2; (2):  c1 03


       可以看出,在非唯一索引中,Oracle会增加一列,用于存放对应rowid,对于唯一索引,是放入data(6)中
       但是,不论怎样,rowid还是会被存储的

<!-- Baidu Button BEGIN -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26515977/viewspace-1207983/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 深入理解Oracle调试事件:10046事件详解
下一篇: 深入理解Oracle优化器(1):倾斜列(skew)和histograms
请登录后发表评论 登录
全部评论
腾讯数据库工程师

注册时间:2012-05-10

最新文章