首页 / MYSQL / rowid高速分页解析
rowid高速分页解析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了rowid高速分页解析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2541字,纯文字阅读大概需要4分钟。
内容图文
![rowid高速分页解析](/upload/InfoBanner/zyjiaocheng/563/2d62544461f5450dbda637b081a2df1a.jpg)
--分页第一步 获取数据物理地址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 = 1
--分页第一步 获取数据物理地址 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后
内容总结
以上是互联网集市为您收集整理的rowid高速分页解析全部内容,希望文章能够帮你解决rowid高速分页解析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。