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