: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}} )
joins与include的区别
最新推荐文章于 2023-07-04 23:37:46 发布