SQL效率问题

今天与同事讨论到这样一个很郁闷的问题:
我们在进行一次业务时,会查询到多个表的内容(也就是有多个表的级联)

假设我们有这样一个结构
role{}
department{}
user{
role
department
}
我在这里的意见是,一次查一个东西,如
A.查询 user,
B.user.department
C.user.role

也就是要用的时候从user里面拿.这样就会产生多条SQL,但每条都非常的简单

而我的同事则认为,应该一次把这几个东西都提出来...这样只会产生一条SQL,而这条SQL里面却非常多的JOIN语句

再次说明,是同一个事务

建议还是用join来把所需数据一下子都获取出来。这种东西依靠主键数据库会帮你优化的,效率更高。一条复杂的sql代码永远比完成相同功能的一大堆代码更有含金量。

这个地方其实是由你的业务决定的。如果你肯定每次读取User,这两个属性都肯定出来,那么就不要延迟加载,Hibernate会自动帮你读取。如果你不确定,那么就是延迟加载。你可以用缓存来帮助提高性能。你只需要第一次用多条语句,然后就都是从内存读取了。