背景
最近在用一個同事寫的后臺管理導出數據進行數據分析,然后發現前端一直卡起,后來到服務器上查詢日志,發現內存溢出了。
分析出來原因:原來是表數據量過大超過百萬,然后導致查出來的數據,直接占滿內存。
解決思路
1 傳統思路: 分頁查詢把大數據分成小數據查詢,數據量大的時候分頁查詢效率低下。
分頁查詢關鍵代碼
分頁查詢還可以用線程池進行優化,但是要注意線程安全。
2 流式查詢: 可以一邊從數據庫讀取數據,一邊進行處理,提高了數據處理的效率。
由于流式查詢是逐行讀取數據,查詢速度可能會受到影響。為了提高性能,可以適當調整 fetch size
注解寫法:需要注意方法里面多了個ResultHandler(回調處理),這是和傳統查詢的區別
流式查詢
對比結果
分頁查詢花費300多秒,流式查詢5s左右,效率完勝分頁查詢。
總結
流式查詢很好,但是總有限制條件,請在使用前確保你的數據庫支持流式查詢。