rowid高速分頁解析

2021-12-30 12:05:43 字數 2041 閱讀 4132

--分頁第一步 獲取資料實體地址

select t.rowid rid, t.lastdate from t_test t order by t.lastdate desc;

--分頁第二步 取得最大頁數

select rownum rn, rid

from (select t.rowid rid, t.lastdate

from t_test t

order by t.lastdate desc)

where rownum <= 10;

--分頁第三步 取得最小頁數

select rn,rid

from (select rownum rn, rid

from (select t.rowid rid, t.lastdate from t_test t order by t.lastdate desc)

where rownum <= 10)

where rn > 5;

--分頁第四步 再根據實體地址,查詢出具體資料

select t1.*,t1.rowid

from t_test t1

where t1.rowid in

(select rid

from (select rownum rn, rid

from (select rowid rid, t.lastdate from t_test t order by t.lastdate desc)

where rownum <= 10000)

where rn > 5000);在8i以前rowid由file#+block#+row# 組成,占用6個bytes的空間,10 bit的file# ,22 bit 的block#,16 bit 的row#。

其中oracle的dba(data block address)是32 bits的,包括10 bit 的 file# 和 22 bit 的block#。

由於不存在0編號檔案,oracle中的檔案最大數量2^10-1=1023

而datafile能達到的最大size就是2^22*db_block_size

如果db_block_size為4k的datafile max size就是16g

如果db_block_size為8k的datafile max size就是32g

從oracle 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個變成了每個data_object_id不能超過1023個資料檔案。當然,你或許要問,

為什麼oracle不調整rowid中表示 file# 的 bit數量,這個應該是由於相容性的引起的,在 oracle7 的索引中儲存的rowid

就是 file# + block# + row# ,因為這樣處理後關於索引的儲存,oracle8和oracle7沒有發生變化。

雖然oracle使用了extend rowid,但是在普通索引裡面依然儲存了bytes的rowid,只有在global index中儲存的是10bytes

的extend rowid,而extend rowid也是global index出現的乙個必要條件。

1. rowid基本概念:

1) rowid是乙個偽列,是用來確保表中行的唯一性,它並不能指示出行的物理位置,但可以用來定位行

2) rowid是儲存在索引中的一組既定的值(當行確定後)。我們可以像表中普通的列一樣將它選出來

3) 利用rowid是訪問表中一行的最快方式

4) rowid需要10個位元組來儲存,顯示為18位的字串。

2. 什麼情況下rowid會發生變化

一般來說,當表中的行確定後,rowid就不會發生變化。 但當如下情況發生時,rowid將發生改變:

1) 對乙個表做表空間的移動後

2) 對乙個表進行了exp/imp後

高速排序 解析

高速排序法原理也是用了分治法,主要原理是將陣列分為a p.q 1 和a q 1.r 然後調整元素使得a p.q 1 小於等於q,也小於等於a q 1.r 然後不斷的遞迴,到最後就排序完畢。上 quicksort.cpp 定義控制台應用程式的入口點。include stdafx.h includeus...

高速排序 解析

高速排序法原理也是用了分治法,主要原理是將陣列分為a p.q 1 和a q 1.r 然後調整元素使得a p.q 1 小於等於q,也小於等於a q 1.r 然後不斷的遞迴,到最後就排序完畢。上 quicksort.cpp 定義控制台應用程式的入口點。include stdafx.h includeus...

分頁效果解析

先來個加密解密 crypt encrypt request secret crypt decrypt encryptedvalue hash 單向加密 判斷 hash make request newpassword hash check plain text hashedpassword 輔助函式...