不要循环查询数据库
在編碼過程中要避免在循環中查詢數據庫,能一次查詢的就不要多次查詢。下面兩個代碼塊是完全等效的。代碼塊一寫起來簡單,但卻在循環中多次查詢數據庫,該代碼執行時間為8毫秒。代碼二寫起來麻煩甚至還多了個雙重循環,但只查詢一次數據庫,該代碼執行時間為2毫秒。
代碼塊一:
for (Device dev : list) {
String dmi = dev.getDeviceModelId();
if (StringUtils.isBlank(dmi)){
continue;
}
DeviceModel dm = this.deviceModelManager.get(dmi); //查詢數據庫
dev.setDeviceModel(dm);
}
代碼塊二:
List<String> deviceModelIdList = new ArrayList<String>();
for (Device dev : list) {
String dmi = dev.getDeviceModelId();
if (StringUtils.isBlank(dmi)){
continue;
}
deviceModelIdList.add(dmi);
}
List<DeviceModel> deviceModelList = this.deviceModelManager.find(new NameValuePair("id", MatchMode.IN, deviceModelIdList)); //查詢數據庫
for (Device dev : list) {
for(DeviceModel model : deviceModelList){
if(model.getId().equals(dev.getDeviceModelId())){
dev.setDeviceModel(model);
}
}
}
總結
- 上一篇: 计算机组成原理指令寻址方式,计算机组成原
- 下一篇: linux cmake编译源码,linu