oracle排序问题

做项目时发现一个问题,sql语句如下:

select t1.rowid rid,t2.rowid rid2,rownum rn,t1.*

from table_a t1 ,table_b t2     where ...

order by t2.a,t2.b,t2.c

 

表中有2条记录,其中a/b/c三个字段都是number,这2条记录中,这3个字段值都相同,a/b都是0,c都为null。

 

查询结果为2条结果,假设为A和B。

A的rd为AAAMv3AAFAAAAeFAAA,    rd2为AAAMw0AAFAAAAmgAAA,rownum为2

B的rd为AAAMv3AAFAAAAeEAAC,    rd2为AAAMw0AAFAAAAmcAAB,rownum为1

 

现象:1.执行上述sql的结果是  先A后B

        2.去掉order by后的执行结果是   先B后A

        3.执行  select * from (上述sql语句)   结果与1相同

        4.执行  select * from (上述sql语句) where rownum<3   结果与2相同

 

分析:实际上oracle没有进行任何排序操作,rowid表示的是数据存放的数据块内部地址,如果没有要求排序,oracle会顺序的从数据块中读取符合条件的数据返回到客户端,不过看起来好像是按照rowid排序似的。 

       在Oracle中,orderby字段值都相等时,记录的顺序是随机的!当然了 其实这个顺序应该是SQL优化器优化执行的结果!

       1.可以看作是sql优化器优化执行的结果

       2.可以看作rid升序。

       3.同1

       4.同2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值