浏览 1817 次
锁定老帖子 主题:Oracle中子查询两种实现方式有何不同?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-17
在研究Hibernate如何实现分页的?时,看到Hibernate针对Oracle 8i和9i实现分页的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_的实际意义,不考虑它命名上的不同)。我的疑问:从8i到9iOracle这边做了什么调整导致了这个变化?还是Hibernate后来发现问题后,借此机会做了改动?对此疑问,我的猜测: 9i的写法,可以减少临时表a的大小,从而在Oracle层面上减少内存占有,也就加快了执行速度。对否?沾边否? 贴在这里,引下玉。声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-17
猜测:可以让DB用FIRST_ROWS优化?
但是这个优化Hint在8i中貌似也有。 |
|
返回顶楼 | |
发表时间:2009-12-17
9i 的文档上写的很清楚, 内层的条件会被先扩展开。
这个查询只查到你需要的最大的rownum, 从而实现优化。 |
|
返回顶楼 | |