Oracle中子查询两种实现方式有何不同?

在研究Hibernate如何实现分页的?时,看到Hibernate针对Oracle 8i9i实现分页的sql不大一样, 于是就想问下,这两种实现有什么区别?是什么原因造成的这种区别?

 

8i中的sql是这样的: select * from ( select row_.*, rownum rownum_ from ( realSQL )  row_ ) a where rownum_ <= ? and rownum_ > ?

9i的是这样的:select * from ( select row_.*, rownum rownum_ from (  realSQL ) row_ where rownum <= ?) a where rownum_ > ?

 

区别在于,9i中,把原来外面的rownum_ <= ?放到了里面(这里只考虑rownum_的实际意义,不考虑它命名上的不同)。

 

我的疑问:8i9iOracle这边做了什么调整导致了这个变化?还是Hibernate后来发现问题后,借此机会做了改动?

对此疑问,我的猜测: 9i的写法,可以减少临时表a的大小,从而在Oracle层面上减少内存占有,也就加快了执行速度。

 

对否?沾边否? 贴在这里,引下玉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值