2

假设我的模型(帐户)具有以下列 account_id、user_id、party_id、日期和名称

我执行:

Account.find_by_account_id_and_user_id_and_party_id_and_date_and_name(1,2,3,"2012-03-12","Venus")

   Account.where(:account_id => 1, :user_id => 2, :party_id => 3,:date => "2012-03-28",:name => "Venus").limit(1).first

哪个会给我更好的表现?

4

2 回答 2

5

where为您提供稍微更好的性能。find_by是通过method_missing魔术实现的;method_missing需要先调用对象的方法表以查看是否存在现有方法,如果没有则调用method_missing,而where只是正确找到方法。

要查看这方面的实际基准,请查看这篇文章

于 2012-08-07T15:25:36.510 回答
1

他们输出的数据库查询在两个示例中都是相同的。因此,就这种性能而言,它们是相等的。但是,前者在您第一次使用它时需要 method_missing 查找和动态方法定义,而且对我来说,它更难阅读,并且不是一个很好的方法来处理具有这么多参数的查询。

我会根据个人的可读性选择“where”,但它们都会输出相同的选择查询,所以无论如何它真的无关紧要。

于 2012-08-07T15:25:02.707 回答