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