首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

joins与include的差异

2012-08-30 
joins与include的区别? :joins和:include的用法比较类似,但是二者又有一定的区别,这两个都能提高效率,让我

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

热点排行