检索数据库数据的finder方法的性能

时间:2011-06-16 21:24:42

标签: ruby-on-rails ruby performance ruby-on-rails-3 methods

我正在使用Ruby on Rails 3.0.7,我想知道使用User.all方法有什么优点和缺点(与性能有关),然后对每个需要的请求执行查找结果的方法使用User.find(<id>)单独检索每条记录。

我问这个是因为在我的 view 文件中我有这样的东西:

accounts.each { |account|
  puts account.user.name
}

更新

例如,Stackoverflow网站如何处理有关finder方法的标签?

1 个答案:

答案 0 :(得分:2)

除非您确定数据集非常小,最多只能输入数十个记录,否则不要获取任何内容all。获取所有用户是一种灾难,因为此操作的内存使用量将随着系统上的用户数量线性增加。

在大多数情况下检索子集时,必须使用findwhere方法,除非您可以绝对确定所涉及的记录数量是微不足道的。< / p>

我甚至提倡使用select_valuesselect_rows,只需要一点点数据,而不需要模型的开销,这对大型表格列表很有用。

请记住,在加载模型时,默认情况下会加载与其关联的所有内容。对于用户而言,这可能包括他们的扩展传记,他们的地址,他们喜欢的颜色,他们的电子邮件,他们的密码,所有你使用的是他们的名字,然后扔掉这个对象。如果需要考虑性能,则仅获取所需内容。

在控制器中安装以下内容几乎总是错误的:

@users = Users.all

您需要做的是分页,或者当更多用户注册您的系统时,该页面会逐渐变慢。在某些时候,页面将永远不会正确呈现,因为它将首先超时。