我在做一個(gè)功能時(shí)需要批量讀取數(shù)據(jù)庫(kù)中的數(shù)據(jù),就涉及到數(shù)據(jù)庫(kù)的分頁(yè)功能,但是當(dāng)數(shù)據(jù)量越大時(shí)分頁(yè)語(yǔ)句越到后面越慢,請(qǐng)問(wèn)該如何優(yōu)化?
//批量獲取數(shù)據(jù)函數(shù)
//當(dāng)‘start’越大時(shí)性能越低,sql語(yǔ)句改如何優(yōu)化
private List<Object[]> getData(String tableName,String iden_code,String startTime,String endTime,int start){
endTime = "to_date('"+endTime+"','%Y-%m-%d')";
startTime = "to_date('"+startTime+"','%Y-%m-%d')";
String sql ="select skip "+start+" first "+persize+" "+iden_code+" from "+tableName+" " +
"where s_ext_timestamp >= "+startTime+" and s_ext_timestamp <= "+endTime;
//System.out.println(sql);
List<Object[]> list = frDao.query(sql);
System.out.println(tableName+" 表本批數(shù)據(jù)共有 "+list.size()+" 條!");
return list;
}
1 回答

慕姐8265434
TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
我們可以換一種思路解決問(wèn)題,informix skip 分頁(yè)語(yǔ)句根據(jù)服務(wù)器性能所表現(xiàn)出來(lái)的效率各有不同,當(dāng)persize越大時(shí),即每次查詢數(shù)據(jù)越大,所需時(shí)間越長(zhǎng)。在沒(méi)有找到如何優(yōu)化skip語(yǔ)句時(shí),我們可以不去理會(huì)sql查詢的時(shí)間問(wèn)題。我現(xiàn)在將persize設(shè)置為每次查詢200000數(shù)據(jù),所需時(shí)間十幾秒。重要的是程序處理20萬(wàn)數(shù)據(jù)的效率加快就可以了,可以使用多線程等技術(shù)。這樣比以前查詢加處理200000數(shù)據(jù)的時(shí)間要少得多!
添加回答
舉報(bào)
0/150
提交
取消