开发者社区> 问答> 正文

关于dao类循环单个查询和批量查询哪个效率高的问题?

先简单描述下我的开发场景:首先我需要访问web service服务,获取一个数据集合List list。然后需要根据Entity的id属性查询数据库,绑定Entity的图片路径imagePath。需要说明的是,list集合的数据量不大。

然后我个人采用的方法是,循环list,每次调用dao类的queryImageById(int id)方法,逐个绑定Entity的imagePath。但我认为不妥的是,当list中数据量过大时,这样循环调用数据库查询,获取连接、关闭连接等等,是很消耗性能的。

那我能想到的第二种方式根据list进行批量查询,将得到的查询结果再循环,逐个比对list中Entity的id值,然后绑定Entity的imagePath。这种方法个人认为不用频繁地操作数据库,性能会提高。但循环次数增多,看的很繁琐。首先需要循环list,获取Entity的id集合;然后调用dao类类似queryImageByBatch(List<Integer> ids)的方法,获取到所有Entity的imagePath后(假设是Map<key, value>,key是Entity的id,value为Entity的imagePath);最后循环list和Map,按照id绑定Entity的imagePath。

其实提出这种情况,我想了解下,针对这种编程情况,实践经验是哪种方法。是根据具体数据情况具体分析,来决定采用哪个方法?还是就是站在性能的考虑,固然地选择第二种方法?

展开
收起
a123456678 2016-03-17 10:46:18 4340 0
2 条回答
写回答
取消 提交回答
  • 我也在找这个的答案,希望大神回答下。我的理解是数据库服务器的资源是很宝贵的,如果使用关联查询,数据库服务器缓存数据的时间会更久,会浪费一点计算能力。还有可能启动没必要的数据库连接,因为非核心连接,需要过了活跃时间才会销毁。当然如果最大和最小一样当我没说。

    2020-03-02 16:42:43
    赞同 展开评论 打赏
  • 为什么不用联合查询?一条SQL搞定,调用起来方便,看上去也没有那么繁琐,节省IO(网络)开销。还有,你不用连接池的吗?怎么会每次都要连接和关闭呢。还有还有,你的食事务是怎么保证的,如果每执行一条SQL都要连接和关闭,那就没有事务了。不是么。 我在开发时尽量用一条SQL,嵌套联合各种来,因为可以减小IO的消耗。只要表和索引合理,不会很慢的。毕竟我不是千万里面做count(1)之类的操作

    2019-07-17 19:04:45
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
RowKey与索引设计:技巧与案例分析 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载