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

chace0120 发布于 2014/07/11 18:09
阅读 1K+
收藏 0

    先简单描述下我的开发场景:首先我需要访问web service服务,获取一个数据集合List<Entity> 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。

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

加载中
0
小埋酱
小埋酱
原则是尽可能的减少连接数据库的次数
chace0120
chace0120
谢谢
0
棒子面er
棒子面er
为什么不用联合查询?一条SQL搞定,调用起来方便,看上去也没有那么繁琐,节省IO(网络)开销。还有,你不用连接池的吗?怎么会每次都要连接和关闭呢。还有还有,你的食事务是怎么保证的,如果每执行一条SQL都要连接和关闭,那就没有事务了。不是么。 我在开发时尽量用一条SQL,嵌套联合各种来,因为可以减小IO的消耗。只要表和索引合理,不会很慢的。毕竟我不是千万里面做count(1)之类的操作
棒子面er
棒子面er
用IN不行嘛
chace0120
chace0120
我举的例子中list中的数据在另一个服务器中,所以没办法联合查询的,只能获取到数据后,拿数据的id再去本地数据库中去查找。项目中使用连接池了,但我不确定的是,是否使用了连接池,就可以毫无顾忌地在循环中频繁地去操作数据库了,特别像数据量大时,并发量大时?
0
棒子面er
棒子面er
网络传输也是耗时的
返回顶部
顶部