joins与include的区别
? :joins和:include的用法比较类似,但是二者又有一定的区别,这两个都能提高效率,让我们谈一下,他们的优点和区别吧?
????? 1>: 优点: 举个例子?
?????????? accounts表和blogs表的关系是一对多?
????? 1)blogs = Blog.find(:all)? # 查询一次blogs表?
?????????? blogs.each {|blog| blog.account.email}?? # 循环多少次,就查询多少次accounts表?
????? 2)blogs = Blog.find(:all, :include => :account)? #查询了blogs表和accounts表各一次?
?????????? blogs.each {|blog| blog.account.email}?? # 不再查询,因为已经加载了accounts表?
????? 总结: :include 减少了查询表的次数,提高了访问数据库的效率,:joins和:include都可以减少查询表的次数?
????? 注意: 前面的:include预加载,也可以继续优化,也就是使用效率更高的:joins,这种方式叫做‘携带加载’,举例:blogs = Blog.find(:all, :joins => :account, :select => "blogs.*, accounts.email as accounts_email" )?
???? 2>:? :joins和:include的区别?
???? 这两个都是联表查询,可以提高效率,但是:include 是预加载,也就是将关联的信息会预加载到内存,那么当我们用到预加载的内容时,使用这个会很好,如果不用到预加载的内容时,则不要用:include,而要用:joins,例如我们把关联表的某些数据用到条件里时,而不用到页面显示,这时就用:joins,具体的例子: blogs = Blog.find(:all, :include => :account, :conditions => {:accounts => {:id => 1}} )?