唯一索引和非唯一索引ROWID儲存的區別
最近一直在思考這個問題,網上關於這個問題的帖子很多,自己就常用的B*樹索引專門做了個小測試。
SQL> conn / as sysdba
已連線。
SQL> create table t as select * from all_objects;
表已建立。
一、首先測試非唯一索引
SQL> create index idx_t on t(object_id,object_name);
索引已建立。
SQL> select header_file,header_block,blocks from dba_segments
2 where segment_name='IDX_T';
HEADER_FILE HEADER_BLOCK BLOCKS
----------- ------------ ----------
1 61825 384
SQL> alter system dump datafile 1 block min 61827 block max 61828;
系統已更改。
檢視最新生成的使用者跟蹤日誌TRC
Start dump data blocks tsn: 0 file#: 1 minblk 61827 maxblk 61828
buffer tsn: 0 rdba: 0x0040f183 (1/61827)
scn: 0x0000.0050a75f seq: 0x02 flg: 0x04 tail: 0xa75f0602
.............................................................................................................
row#148[4758] flag: ------, lock: 0, len=18
col 0; len 3; (3): c2 02 34
col 1; len 4; (4): 4c 4f 42 24
col 2; len 6; (6): 01 40 02 03 00 39
......................................................................................................
----- end of leaf block dump -----
End dump data blocks tsn: 0 file#: 1 minblk 61827 maxblk 61828
二、首先測試唯一索引
SQL> drop index idx_t
2 ;
索引已刪除。
SQL> create unique index idx_t on t(object_id,object_name);
索引已建立。
SQL> select header_file,header_block,blocks from dba_segments
2 where segment_name='IDX_T';
HEADER_FILE HEADER_BLOCK BLOCKS
----------- ------------ ----------
1 61825 384
SQL> alter system dump datafile 1 block 61830;
系統已更改。
檢視最新生成的使用者跟蹤日誌TRC
Start dump data blocks tsn: 0 file#: 1 minblk 61830 maxblk 61830
buffer tsn: 0 rdba: 0x0040f186 (1/61830)
...............................................................................................................
row#12[7621] flag: ------, lock: 0, len=38, data:(6): 00 40 f1 0b 00 15
col 0; len 3; (3): c2 09 10
col 1; len 25; (25):
.............................................................................................................
----- end of leaf block dump -----
End dump data blocks tsn: 0 file#: 1 minblk 61830 maxblk 61830
總結:注意以上紅色部分,它就是存的ROWID,但是在非唯一索引,ROWID作為單獨的一列新增到索引鍵中,而唯一索引的ROWID則是存到data(6)中,由此也可以證明B*樹索引中不存在非唯一條目。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25964700/viewspace-700453/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於唯一性索引造成堵塞和非唯一性索引造成堵塞的區別索引
- 主鍵和唯一索引的區別索引
- 轉載-treedump索引讀取索引儲存的資料值--非唯一性索引索引
- 唯一性約束和唯一性索引的區別索引
- Oracle主鍵、唯一鍵與唯一索引的區別Oracle索引
- 唯一index和非唯一index中leaf node裡rowid的一點區別。Index
- 主鍵(PK)與非空唯一索引(Unique Index)的區別索引Index
- MySQL 唯一索引和普通索引MySql索引
- MYSQL中的普通索引,主健,唯一,全文索引區別MySql索引
- 唯一索引索引
- MongoDB之索引(唯一索引)MongoDB索引
- Oracle主鍵約束、唯一鍵約束、唯一索引的區別(轉)Oracle索引
- 【INDEX】Oracle中主鍵、唯一約束與唯一索引之區別IndexOracle索引
- MySQL <唯一索引>MySql索引
- [轉]聚集索引和非聚集索引的區別索引
- 使用聚集索引和非聚集索引的區別索引
- 主鍵、自增主鍵、主鍵索引、唯一索引概念區別與效能區別索引
- MySQL實戰45講——普通索引和唯一索引MySql索引
- SQL Server 聚集索引和非聚集索引的區別SQLServer索引
- SQL Server 深入解析索引儲存(非聚集索引)SQLServer索引
- 非唯一索引不為人所知的一個細微特徵索引特徵
- 如何選擇普通索引和唯一索引《死磕MySQL系列 五》索引MySql
- mysql唯一索引是什麼MySql索引
- 索引特性之儲存列值及ROWID索引
- 【Mongo】mongos shard 唯一索引的問題Go索引
- 唯一索引操作可能產生的鎖索引
- 唯一索引,可以在索引列插入多個null嗎索引Null
- 表上建立唯一性索引,SQL*Loader用或不用dirdect的區別索引SQL
- 資料庫表的唯一索引問題資料庫索引
- mysql的唯一索引不會利用change bufferMySql索引
- 唯一性索引優化實踐索引優化
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- MySQL的btree索引和hash索引的區別MySql索引
- 聚簇索引和非聚簇索引到底有什麼區別?索引
- 什麼是行儲存和列儲存?正排索引和倒排索引?MySQL既不是倒排索引,也索引MySql
- 【SQL Server2005頁面儲存5之--非聚集索引行在非葉級別儲存】SQLServer索引
- mysql 新增時,唯一索引衝突時更新MySql索引
- 索引唯一性掃描(INDEX UNIQUE SCAN)索引Index