Oracle RowID 欄位型態特性
1. rowid 是十六進位字串,表示資料表中資料列的唯一位置。
這種資料型別主要供 ROWID 虛擬資料行 (pseudo column) 的傳回值使用
Example:
SELECT rowidtochar(ROWID) row_id1, ROWID row_id2 FROM emp
當一個Table都沒有Key,則可使用ROWID來當作Key
ROWID 不需手動建立 , 每個 Table 都會有
2. rowid 是由object number + file number + block number + row number 四個項目所組成的(可視為資料的存放位置)
也就是說記錄每一筆列的位置,存在於某一個 block, 不需要搜尋就可以指定讀取某一列,
因此它的查詢速度是最快的.
3.而建立index就是把你的主鍵對應一個rowid,所以可以增快查詢速度
4.rowid 是會變動的,
rowid 是會變動的,
rowid 是會變動的, (要說三次)
所以以rowid當查詢條件並不適當;建index會是比較好的方式,因為oracle會去維護index,
當rowid變動時, index中的rowid也會跟著變動
Example:
做個小實驗就可證明….rowid是會變的, 把 table 搬到另一個 tablespace ,rowid 值就會變動
SQL> select rowid,ename from scott.emp;
ROWID ENAME
—————— ———-
AAAQheAAQAABdy8AAA SMITH
AAAQheAAQAABdy8AAB ALLEN
AAAQheAAQAABdy8AAC WARD
AAAQheAAQAABdy8AAD JONES
AAAQheAAQAABdy8AAE MARTIN
AAAQheAAQAABdy8AAF BLAKE
AAAQheAAQAABdy8AAG CLARK
AAAQheAAQAABdy8AAH SCOTT
AAAQheAAQAABdy8AAI KING
AAAQheAAQAABdy8AAJ TURNER
AAAQheAAQAABdy8AAK ADAMS
AAAQheAAQAABdy8AAL JAMES
AAAQheAAQAABdy8AAM FORD
AAAQheAAQAABdy8AAN MILLER
已選取 14 個資料列.
SQL> alter table scott.emp move tablespace users;
已更改表格.
SQL> select rowid,ename from scott.emp;
ROWID ENAME
—————— ———-
AAAQhfAAEAAAAAcAAA SMITH
AAAQhfAAEAAAAAcAAB ALLEN
AAAQhfAAEAAAAAcAAC WARD
AAAQhfAAEAAAAAcAAD JONES
AAAQhfAAEAAAAAcAAE MARTIN
AAAQhfAAEAAAAAcAAF BLAKE
AAAQhfAAEAAAAAcAAG CLARK
AAAQhfAAEAAAAAcAAH SCOTT
AAAQhfAAEAAAAAcAAI KING
AAAQhfAAEAAAAAcAAJ TURNER
AAAQhfAAEAAAAAcAAK ADAMS
AAAQhfAAEAAAAAcAAL JAMES
AAAQhfAAEAAAAAcAAM FORD
AAAQhfAAEAAAAAcAAN MILLER
已選取 14 個資料列.