唯一索引的索引鍵不儲存rowid

2021-08-27 10:12:41 字數 1340 閱讀 5759

tom的oracle 9i&10g程式設計藝術中這樣一句話:在乙個非唯一索引中,oracle會把rowid作為乙個額外列加到鍵上,使索引鍵為唯一; 先按索引鍵排序,再按rowid公升序排序;在乙個唯一索引中,不會再加rowid到索引鍵上。

下面是乙個完整的用例,使用了資料dump技術。

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)中,即row header中。不論怎樣,rowid還是會被儲存的。

Oracle 主鍵外來鍵唯一索引索引

1.查詢索引 select table name,index name from user indexes where table name upper test temp1 2.建立主鍵 1 建立表的時候建立 create table test temp1 id int primary key,n...

主鍵 外來鍵 唯一索引 單索引與組合索引

通過unique key 索引名稱 索引字段 using 索引方法 btree或者hash 例如對使用者表而言,使用使用者id作為其主鍵,但是作為使用者登入的使用者名稱又不能重複,但是將使用者名稱設定成主鍵,不利於後續開發,所以可以將使用者名稱設定成唯一索引,既保證了資料的唯一性,也可以提高查詢速度...

主鍵 唯一鍵 唯一索引區別

主鍵 1.可以定義一列或多列為主鍵。不允許空 null 主健可作外健,唯一索引不可 2.定義乙個主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特殊型別。唯一鍵 唯一性約束 1.唯一性約束用來限制不受主鍵約束的列上的資料的唯一性,用於作為訪問某行的可選手段,指定列上都不允許有相同的值,允許空 null ...