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
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

posted on 2021-10-30 18:34  limho  阅读(3540)  评论(0编辑  收藏  举报

导航