使用Model.find通过ID查找模型的最有效方法

时间:2011-07-13 19:48:04

标签: ruby-on-rails activerecord performance

我注意到我可以通过多种方式执行Model.find(假设@user是User模型的一个实例):

User.find(2)
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ... 

OR

User.find(@user)
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ... 

OR

User.find(@user[:id])
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ... 

OR

User.find(@user.id)
=> #<User id: 2, name: "Mike Swift", email: "valid@email.com", ... etc ... 

后三种方法之间有什么真正的区别吗? (我已经知道User.find(n)会是最快的)我想他们大约会在同一时间工作,但也许我错了。

2 个答案:

答案 0 :(得分:4)

就sql而言,他们都做同样的事情。

User.find(2)

这将是最快的,因为不需要转换。

然后User.find(@user.id)User.find(@user[:id])

最后User.find(@user因为rails需要将用户转换为ID。

答案 1 :(得分:0)

User.find(2)应该更快,因为Rails不需要做任何工作来找出id。其他人需要一定程度的消息传递来获取id。

我怀疑差异是非常显着的。

您可以尝试所有这些内容并查看日志以了解获取响应所需的时间。