ROWID簡介
rowid標誌記錄物理位置的一個id,在 8版本以前,rowid由file# block# row#組成,佔用6個bytes的空間,10 bit 的 file# ,22bit 的 block# ,16 bit 的 row#。
從 8開始rowid變成了extend rowid,由data_object_id# rfile# block# row#組成,佔用10個bytes的空間, 32bit的 data_object_id#,10 bit 的 rfile#,22bit 的 block#,16 bit 的 row#.由於rowid的組成從file#變成了rfile#,所以資料檔案數的限制也從整個庫不能超過1023個變成了每個不能超過1023個 資料檔案。
說了rowid的組成,那麼我們再來看看rowid在索引裡面佔用的位元組數又是什麼樣子的。在 8以前索引中儲存的rowid佔用位元組數也是6bytes,在oracle8之後,雖然oracle使用了extend rowid,但是在普通索引裡面依然儲存了bytes的rowid,只有在global index中儲存的是10bytes的extend rowid,而extend rowid也是global index出現的一個必要條件,下面我們會解釋原因。
為什麼golbal index需要把data_object_id#也包含在index rowid entry中呢?如果不包含會這麼樣?首先我們需要知道index的rowid entry的存在是為了能根據它找到表的這條記錄存在哪個具體的物理位置,我們需要知道它在哪個資料檔案,在哪個block,在那一行,普通的索引 oracle根據rfile#,block#,row#就可以知道了,但是partition table可以分佈在多個,也就是可以分佈在多個資料檔案,當我們建立local index時,index rowid entry並不包含data_object_id#,因為oracle可以知道這個index對應的是哪一個table分割槽,並可以得到table分割槽的 ts#(tablespace號),那麼oracle根據ts#和rfile#就可以找到具體的資料檔案。但是如果換成是golbal index,如果不包含data_object_id#,那麼我們並不能知道這個索引對應著哪個表分割槽,也自然不能知道它的rfile#和file#的轉換關係,所以它將找不到所對應的記錄。包含data_object_id#後,oracle可以根據data_object_id#實現rfile#和 file#的轉換然後找到記錄對應的物理位置。需要注意的是要理解以上概念我們還是需要了解file#和rfile#的區別。
從 8開始rowid變成了extend rowid,由data_object_id# rfile# block# row#組成,佔用10個bytes的空間, 32bit的 data_object_id#,10 bit 的 rfile#,22bit 的 block#,16 bit 的 row#.由於rowid的組成從file#變成了rfile#,所以資料檔案數的限制也從整個庫不能超過1023個變成了每個不能超過1023個 資料檔案。
說了rowid的組成,那麼我們再來看看rowid在索引裡面佔用的位元組數又是什麼樣子的。在 8以前索引中儲存的rowid佔用位元組數也是6bytes,在oracle8之後,雖然oracle使用了extend rowid,但是在普通索引裡面依然儲存了bytes的rowid,只有在global index中儲存的是10bytes的extend rowid,而extend rowid也是global index出現的一個必要條件,下面我們會解釋原因。
為什麼golbal index需要把data_object_id#也包含在index rowid entry中呢?如果不包含會這麼樣?首先我們需要知道index的rowid entry的存在是為了能根據它找到表的這條記錄存在哪個具體的物理位置,我們需要知道它在哪個資料檔案,在哪個block,在那一行,普通的索引 oracle根據rfile#,block#,row#就可以知道了,但是partition table可以分佈在多個,也就是可以分佈在多個資料檔案,當我們建立local index時,index rowid entry並不包含data_object_id#,因為oracle可以知道這個index對應的是哪一個table分割槽,並可以得到table分割槽的 ts#(tablespace號),那麼oracle根據ts#和rfile#就可以找到具體的資料檔案。但是如果換成是golbal index,如果不包含data_object_id#,那麼我們並不能知道這個索引對應著哪個表分割槽,也自然不能知道它的rfile#和file#的轉換關係,所以它將找不到所對應的記錄。包含data_object_id#後,oracle可以根據data_object_id#實現rfile#和 file#的轉換然後找到記錄對應的物理位置。需要注意的是要理解以上概念我們還是需要了解file#和rfile#的區別。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29306197/viewspace-1062691/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ROWID與ROWNUM的簡介與對比
- 巧用rowid簡化sql查詢SQL
- 【ROWID】Oracle rowid說明Oracle
- oracle rowidOracle
- dbms_rowid之dbms_rowid.rowid_info儲存過程使用(in out)儲存過程
- 簡介
- 簡單總結一下rowid的相關知識
- ROWID詳解
- ORACLE ROWID (zt)Oracle
- Jira使用簡介 HP ALM使用簡介
- 轉---DBMS_ROWID.ROWID_CREATE來解決壞塊
- BookKeeper 介紹(1)--簡介
- oracle常用包之dbms_rowid oracle rowid含義分析Oracle
- Amphenol簡介
- Vagrant簡介
- PySimpleGUI 簡介GUI
- Protobuf簡介
- MyBatis 簡介MyBatis
- jango簡介Go
- cookie 簡介Cookie
- Session 簡介Session
- Cookie簡介Cookie
- Virgilio 簡介
- Django簡介Django
- ElasticSearch簡介Elasticsearch
- Javascript 簡介JavaScript
- Electron簡介
- Dubbo 簡介
- JavaScript簡介JavaScript
- CSS 簡介CSS
- 反射簡介反射
- JanusGraph -- 簡介
- CSS簡介CSS
- Bootstrap 簡介boot
- pwa簡介
- Apache簡介Apache
- JAVA簡介Java
- JUC簡介