1 表里面的数据对应的rowid是怎么获得的? 是否越晚插进表的数据的rowid越大?2 假设有如下查询结果select max(rowid) as max, min(rowid) as min from a;
max min
--------- ------------
BBB AAA则select * from a where a.num > 1;与select * from a where rowid >= 'AAA' and rowid <= 'BBB' where a.num > 1;是否能查出同样结果?max函数对rowid进行比较的原则是什么?(即通过什么来判断两rowid谁大谁小)
3 rowid取值有什么规律,例如有没有固定长度是多少,组成字符(似乎只有大写和数字字符)
问题比较多,麻烦各位帮忙^_^
max min
--------- ------------
BBB AAA则select * from a where a.num > 1;与select * from a where rowid >= 'AAA' and rowid <= 'BBB' where a.num > 1;是否能查出同样结果?max函数对rowid进行比较的原则是什么?(即通过什么来判断两rowid谁大谁小)
3 rowid取值有什么规律,例如有没有固定长度是多少,组成字符(似乎只有大写和数字字符)
问题比较多,麻烦各位帮忙^_^
rowid不一定随数据插入而增大
应该是同样的结果,
rowid也是一个数字,64进制
3
rowid是基于base64编码,一共有18位,分为4部分:OOOOOOFFFBBBBBBRRR其中:OOOOOO: 六位表示data object id,根据object id可以确定segment。关于data object id和object id的区别,请参考http://www.orawh.com/index.php/archives/62FFF: 三位表示相对文件号。根据该相对文件号可以得到绝对文件号,从而确定datafile。关于相对文件号和绝对文件号,请参考http://blog.itpub.net/post/330/22749BBBBBB:六位表示data block number。这里的data block number是相对于datafile的编号,而不是相对于tablespace的编号。RRR:三位表示row number。
2,rowid就是个80BIT的二进制数
3,从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个变成了每个表空间不能超过1023个 数据文件