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
來源:稀土掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。