oracle千万级别大表分页查询


1、oracle千万级别大表分页查询

传统oracle分页使用如下结构:

select *
from (
select fundacco,rownum rowno from
tbl_20191231
where rownum <= #{end}) b
where
b.rowno > #{start}
复制代码

当时当start越来越大的时候,这个外层子查询所需要遍历的数据量就越多,经过实际生产验证会很慢,500W数据量,每页250条,当start大于200W时,平均耗时在1-2s。

如何优化呢?oracle sql层面上我们不能进行优化了,但我们可以通过新增加一个列rownos,值单调递增且建立唯一索引。然后我们通过下面sql查询就非常快了,平均在20ms左右。

select * from tbl_20191231 t where t.rownos > #{start} and t.rownos <= #{end} 

复制代码

其实不难发现,我们是利用了oracle的索引范围扫描(index range scan)特性而已。执行计划如下:

 


作者:拥抱心中的梦想
链接:https://juejin.cn/post/6844903907517448200
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


免责声明!

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



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