問題背景:在for循環中,不斷訪問數據庫查詢數據。數據庫
代碼以下:性能
優化前數據庫查詢語句:優化
private static String selectSql = "select * from captain.resourceAccessSetting where backupProId = ?";spa
優化前代碼:code
for (RecordInfo recordInfo : recordInfos) { int id = recordInfo.getId(); ResourceAccessSetting resourceAccessSetting = resourceAccessSettingDao.getResourceAccessSetting(id);
}
優化後數據庫查詢語句: blog
private static String selectSql = "select * from captain.resourceAccessSetting where backupProId in(:param)";get
優化後代碼:for循環
List<Integer> ids = new ArrayList<Integer>(recordInfos.size()); for (RecordInfo recordInfo : recordInfos) { ids.add(recordInfo.getId()); } List<ResourceAccessSetting> resourceAccessSettings = resourceAccessSettingDao.getResourceAccessSettinglist(ids);
從代碼層面看:優化前代碼查詢數據庫次數依賴與recordinfolist對應的size。優化後代碼只涉及一次數據庫查詢,大大減小與數據庫的交互。class
從優化狀況看:性能會提高不少。上述代碼只截取業務邏輯的部分代碼。在優化前,代碼執行時間30s,有時候甚至更長。優化後代碼執行時間2s如下。List
僅以此記錄如何去優化循環查詢數據庫的性能。