先简单描述下我的开发场景:首先我需要访问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。
其实提出这种情况,我想了解下,针对这种编程情况,实践经验是哪种方法。是根据具体数据情况具体分析,来决定采用哪个方法?还是就是站在性能的考虑,固然地选择第二种方法?
我也在找这个的答案,希望大神回答下。我的理解是数据库服务器的资源是很宝贵的,如果使用关联查询,数据库服务器缓存数据的时间会更久,会浪费一点计算能力。还有可能启动没必要的数据库连接,因为非核心连接,需要过了活跃时间才会销毁。当然如果最大和最小一样当我没说。
为什么不用联合查询?一条SQL搞定,调用起来方便,看上去也没有那么繁琐,节省IO(网络)开销。还有,你不用连接池的吗?怎么会每次都要连接和关闭呢。还有还有,你的食事务是怎么保证的,如果每执行一条SQL都要连接和关闭,那就没有事务了。不是么。 我在开发时尽量用一条SQL,嵌套联合各种来,因为可以减小IO的消耗。只要表和索引合理,不会很慢的。毕竟我不是千万里面做count(1)之类的操作
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。