循环中查询数据库性能问题
(2015-08-05 14:17:43)
标签:
循环中数据库性能优化for |
分类: 数据库 |
for循环里面没有dao的查询,方法一:
List list = productDao.getProudctList(map);
if (list.size() > 0) {Map map2 = new HashMap();
List proList =new ArrayList();
for (int i = 0; i < list.size(); i++) {
ProductPop productPop = list.get(i);
proList.add(productPop.getProduct_id());
if (searcher!=null) {
map2.put("status", searcher.getStatus());
}
}
map2.put("products_id",proList);
List goodsPop = productDao.queryGoodsList(map2);
for (int i = 0; i < list.size(); i++) {
ProductPop productPop = list.get(i);
List goodsPopList=new ArrayList();
for (GoodsPop goodsPop2 : goodsPop) {
if (productPop.getProduct_id().equals(goodsPop2.getProducts_id())) {
goodsPopList.add(goodsPop2);
}
}
productPop.setGoodsList(goodsPopList);
}
}
return list;
}
for循环里面有添加dao进行数据库查询,方法二:
List list = productDao.getProudctList(map);
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
ProductPop productPop = list.get(i);
Map map2 = new HashMap();
map2.put("products_id",
productPop.getProduct_id());
if (searcher!=null) {
map2.put("status", searcher.getStatus());
}
List goodsPop =
productDao.queryGoods(map2);(循环中查询)
if (goodsPop!=null&&goodsPop.size()>0) {
for (int j = 0; j < goodsPop.size(); j++) {
GoodsPop gPop=goodsPop.get(j);
Integer showQuality = 0;
if (gPop.getSku()!=null&&!"".equals(gPop.getSku())) {
List gStockList =
productDao.queryGoodsStockByGidAndW
if(gStockList!=null&&gStockList.size()>0){
showQuality = new
Integer(gStockList.get(0).getAvailableQty());
}
}
gPop.setShow_quantity(showQuality);
}
}
productPop.setGoodsList(goodsPop);
}
}
两种书写方式在本地小数据测试,性能都差不多,但是在大数据的生产环境测试的时候,方法一比方法二就有明显的有事,
特别是在方法一比方法二减少了对数据库的访问,这样就可以避免因为连接数据库的中断而出现问题,这样就更加稳定。