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}} ) 

你可能感兴趣的:(Rails)