加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何避免多个查询:包含在Rails中?

发布时间:2020-12-16 19:59:57 所属栏目:百科 来源:网络整理
导读:如果我这样做 post = Post.find_by_id(post_id,:include = :comments) 执行两个查询(一个用于帖子数据,另一个用于帖子的注释).然后当我做post.comments时,不执行另一个查询,因为数据已被缓存. 有没有办法只做一个查询,仍然通过post.comments访问评论? 解决
如果我这样做
post = Post.find_by_id(post_id,:include => :comments)

执行两个查询(一个用于帖子数据,另一个用于帖子的注释).然后当我做post.comments时,不执行另一个查询,因为数据已被缓存.

有没有办法只做一个查询,仍然通过post.comments访问评论?

解决方法

不,那里没有.这是以下行为:包括,因为JOIN方法最终没有效率.

例如,考虑以下情况:Post模型有3个字段,您需要选择,2个字段为注释,这个特定的帖子有100个注释. Rails可以运行单个JOIN查询,方式如下:

SELECT post.id,post.title,post.author_id,comment.id,comment.body
FROM posts
INNER JOIN comments ON comment.post_id = post.id
WHERE post.id = 1

这将返回以下结果表:

post.id | post.title | post.author_id | comment.id | comment.body
---------+------------+----------------+------------+--------------
       1 | Hello!     |              1 |          1 | First!
       1 | Hello!     |              1 |          2 | Second!
       1 | Hello!     |              1 |          3 | Third!
       1 | Hello!     |              1 |          4 | Fourth!
...96 more...

你可以看到问题了.单查询JOIN方法虽然返回您需要的数据,但会以冗余方式返回.当数据库服务器将结果集发送到Rails时,它会将帖子的ID,标题和作者ID发送到每个100次.现在,假设邮政有10个你感兴趣的领域,其中8个是文本块.好恶.这是很多数据.将数据从数据库传输到Rails在CPU周期和RAM两方面都能正常工作,因此最小化数据传输对于使应用程序运行速度更快,更精简是至关重要的.

Rails开发人员掌握了数字,大多数应用程序在使用多个查询时运行得更好,这些查询只能获取每一位数据一次,而不是一个有潜力获得巨大冗余的查询.

当然,为了运行复杂的条件,有必要加入一个开发人员的时间,并且可以通过以下方法来实现:include with:join.然而,对于预取关系,Rails所采用的方法:include对性能要好得多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读