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 ...