在项目开发的过程中,对于一些实体类,它的大部分字段都可以在一张表中查询到,但另一些属性来来自于其它表,需要用到关联查询或者子查询。下面来探讨一下这两种查询的区别。
例如评论表,它的点赞数来自另一张表
public class Comments {
private Integer commentsId;
private Integer userId;
private String comments;
private Timestamp commentsTime;
//点赞数
private int agreeCnt;
要查询所有评论,并为每个评论类的点赞数赋值。
子查询
List list = sql(xxx)
for(c:list) sql(x); c.setAgreeCnt(xxx);
虽然这种方法在框架中的自动代码书写很方便,但是在循环中写sql,性能怎么样呢。。。
看下面分析吧。
关联查询
select * from commets a left join zan on a.commentsId = b.commentsId
这种写法只需一条sql就可以把所需要的数据查询出来,麻烦的是框架中需要在xml中写sql,把点赞数注入到对象属性中。
性能分析 关键!
对于同一个页面的打开时间,用关联查询和子查询的方法对比!!
关联查询:约0.5s
子查询: 2~3秒
所以当性能需要较高时,不要贪方便在循环里写sql,多使用关联查询