加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

循环中查询数据库性能问题

(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.queryGoodsStockByGidAndWhId(gPop.getSku());
if(gStockList!=null&&gStockList.size()>0){
showQuality = new Integer(gStockList.get(0).getAvailableQty());
}
}
gPop.setShow_quantity(showQuality);
}
}

productPop.setGoodsList(goodsPop);
}
}

两种书写方式在本地小数据测试,性能都差不多,但是在大数据的生产环境测试的时候,方法一比方法二就有明显的有事,

特别是在方法一比方法二减少了对数据库的访问,这样就可以避免因为连接数据库的中断而出现问题,这样就更加稳定。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有