Oracle 分组查询(三层嵌套)效率优化


最简写法:

 select * from (
 
     select rownum as rn, t.* from ( select * from 查询表 ... ) t
 
 ) where rn between 起始行号 and 结束行号;

优势:

  • 简单,容易理解
  • 适合无排序查询

弊端:

  • 每次都对整张表进行查询,效率低下。

调优写法:

select * from (

    select rownum as rn, t.* from ( select * from 查询表 ... ) t
     where rownum < 10

) where rn > 5;

原理:

  • rownum 从 1 开始,逐一而增,不能跳增。
  • 若一开始便添加 rownum > 5 条件,( 1 > 5 == false ) 恒成立,查询将失败。
  • 所以,在第二层查询( 获取 rownum层 )先控制最大值。
  • 到了第三层查询( 结果层 )再通过 rownum(别名)控制最小值。

总结:

有 order by:用方法二

无 order by:用方法一

当然,

绝大情况下,都是选用方法二会更有效率。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM