优化SQL查询轨道

基尔奇

在帖子索引页面上,我以这种方式列出了所有帖子:

posts_controller.rb

def index
  @posts = Post.includes(:comments).paginate(:page => params[:page]).order("created_at DESC")
end

index.html.erb

 <%= render @posts %>

_post.html.erb

<%= gravatar_for post.user, size:20 %>
<%= link_to "#{post.title}", post_path(post) %>
<%= time_ago_in_words(post.created_at) %> 
<%= post.comments.count %>
<%= post.category.name if post.category %>

每页35个帖子

当我第一次在dev env中加载页面时,rack-mini-profiler会显示以下时间:1441.1毫秒

几次重新加载后:〜700毫秒

我可以以某种方式减少此时间和sql请求数量吗?

如果有帮助,这是rmp图像:

在此处输入图片说明

在此处输入图片说明

张国荣

您可以通过以下方式减少sql查询的数量:

  • 包括user以及comments,因为您似乎在显示图形显示时正在使用它

  • 更改post.comments.countpost.comments.size

虽然大小,计数,长度是数组的同义词,但对于活动记录关系或关联,它们是不同的:

  • length 加载关联(除非已经加载)并返回数组的长度
  • count进行select count(*) query是否加载关联
  • size使用length是否已加载关联,count如果未加载

在您的情况下,注释关联已加载,但是由于您正在使用count,因此实际上并未使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章