循環查詢數據庫的性能問題及優化

問題背景:在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

僅以此記錄如何去優化循環查詢數據庫的性能。

相關文章
相關標籤/搜索