我自己就想到兩種方式,但感覺都不好。
第一種:
String sql = "SELECT finishclass,finishtm from" +
" (select state finishclass,createtm finishtm,ROW_NUMBER() OVER(PARTITION BY state ORDER BY createtm desc) rn" +
" from PERSONAL_FINISHINFO_T where 1=1 and applyid =" + subsidyId + ") where rn = 1";
List<Map<String, Object>> list = queryBySql(sql);
Iterator<Map<String, Object>> iterator = list.iterator();
Map<String, Object> map = new HashMap<>();
while (iterator.hasNext()){ // 10條資料
Map<String, Object> next = iterator.next();
map.put(next.get("finishclass")+"",next.get("finishtm")+"");
}
---------------------------------------------------------------分開,不在同個類,有些省略了
List<Map<String, Object>> mapList = subsidyApplyService
.listSubsidyCustom(paramMap,nameSet);
for (Map map : mapList ) { //5000+資料
Map<String, Object> finishInfo = subsidyApplyService.lastFinishInfo(map.get("SUBSIDYID").toString());
if(finishInfo != null){
map.put("PRELEXADATE", finishInfo.get("1") == null ? "" : finishInfo.get("1")+"");
map.put("ONSITEAUDITDATE", finishInfo.get("4") == null ? "" : finishInfo.get("4")+"");
map.put("FIRSTFINISHDATE", finishInfo.get("5") == null ? "" : finishInfo.get("5")+"");
map.put("SECONDFINISHDATE", finishInfo.get("6") == null ? "" : finishInfo.get("6")+"");
map.put("THIRDFINISHDATE", finishInfo.get("7") == null ? "" : finishInfo.get("7")+"");
map.put("FINANCIALAUDIT", finishInfo.get("99") == null ? "" : finishInfo.get("99")+"");
}
}
第二種:
String sql = "SELECT finishclass,finishtm from" +
" (select state finishclass,createtm finishtm,ROW_NUMBER() OVER(PARTITION BY state ORDER BY createtm desc) rn" +
" from PERSONAL_FINISHINFO_T ) where rn = 1";
List<Map<String, Object>> list = queryBySql(sql);
Iterator<Map<String, Object>> iterator = list.iterator();
Map<String, Object> map = new HashMap<>();
Map<String, Object> map1 = new HashMap<>();
while (iterator.hasNext()){ //20+萬條資料
Map<String, Object> next = iterator.next();
map.put(next.get("finishclass")+"",next.get("finishtm")+"");
if(map1.keySet().contains(next.get("ID")+"")){
Map<String, Object> idMap = (Map<String, Object>) map1.get("ID");
map.putAll(idMap);
}
map1.put(next.get("ID")+"",map);
}
---------------------------------------------------------------分開,不在同個類,有些省略了
List<Map<String, Object>> mapList = subsidyApplyService
.listSubsidyCustom(paramMap,nameSet);
for (Map map : mapList ) { //5000+資料
Map<String, Object> finishInfo = (Map<String, Object>) map1.get(map.get("SUBSIDYID")+"");
if(finishInfo != null){
map.put("PRELEXADATE", finishInfo.get("1") == null ? "" : finishInfo.get("1")+"");
map.put("ONSITEAUDITDATE", finishInfo.get("4") == null ? "" : finishInfo.get("4")+"");
map.put("FIRSTFINISHDATE", finishInfo.get("5") == null ? "" : finishInfo.get("5")+"");
map.put("SECONDFINISHDATE", finishInfo.get("6") == null ? "" : finishInfo.get("6")+"");
map.put("THIRDFINISHDATE", finishInfo.get("7") == null ? "" : finishInfo.get("7")+"");
map.put("FINANCIALAUDIT", finishInfo.get("99") == null ? "" : finishInfo.get("99")+"");
}
}
直接在主資料那拼接也試過,很慢很慢。可能是我拼接的不好,用的子查詢拼接,也是每個狀態都要查一次再case when。
uj5u.com熱心網友回復:
1.SQL上的優化,在表的ID及where條件后面的所有字鍵先好引索(先不管它引索是否合理,先建引索,聽我的,看一下查詢速度提升了沒有)2.查這么多出來,肯定是要插入的,如果是要插入,不要用Insert.把它放到檔案中,如txt,然后使用LOAD陳述句匯入。每種資料庫都有自己LOAD的寫法。查一下就可以找到。
3.如果是回傳給其它介面或程式使用,不要這種方式,也不要http這種傳輸位元組流,可以考慮使用資料庫或者是FTP,或是傳zip檔案,讓對方介面決議zip就可以了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/223027.html
標籤:Web 開發
上一篇:idea設定問題
下一篇:散分
