背景
最近在用一個(gè)同事寫的后臺(tái)管理導(dǎo)出數(shù)據(jù)進(jìn)行數(shù)據(jù)分析,然后發(fā)現(xiàn)前端一直卡起,后來到服務(wù)器上查詢?nèi)罩荆l(fā)現(xiàn)內(nèi)存溢出了。
分析出來原因:原來是表數(shù)據(jù)量過大超過百萬,然后導(dǎo)致查出來的數(shù)據(jù),直接占滿內(nèi)存。
解決思路
1 傳統(tǒng)思路: 分頁查詢把大數(shù)據(jù)分成小數(shù)據(jù)查詢,數(shù)據(jù)量大的時(shí)候分頁查詢效率低下。

分頁查詢關(guān)鍵代碼
分頁查詢還可以用線程池進(jìn)行優(yōu)化,但是要注意線程安全。

2 流式查詢: 可以一邊從數(shù)據(jù)庫讀取數(shù)據(jù),一邊進(jìn)行處理,提高了數(shù)據(jù)處理的效率。
由于流式查詢是逐行讀取數(shù)據(jù),查詢速度可能會(huì)受到影響。為了提高性能,可以適當(dāng)調(diào)整 fetch size

注解寫法:需要注意方法里面多了個(gè)ResultHandler(回調(diào)處理),這是和傳統(tǒng)查詢的區(qū)別

流式查詢
對比結(jié)果
分頁查詢花費(fèi)300多秒,流式查詢5s左右,效率完勝分頁查詢。
總結(jié)
流式查詢很好,但是總有限制條件,請?jiān)谑褂们按_保你的數(shù)據(jù)庫支持流式查詢。