2012-08-07 60 views
0

假设我有模型(客户)与以下的列ACCOUNT_ID,USER_ID,party_id,日期和名称哪给了我更好的性能Activerecord find_by或者哪里?

,我执行:

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 

哪位能给我更好的性能?

回答

3

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

要查看此的实际基准,check out this post

+0

谢谢Veraticus。我不知道find_by这个method_missing概念。我知道这两种方式都是相同的查询和使用哪种方式更清晰的方式来编写大型查询 – AnkitG 2012-08-08 06:05:19

1

他们输出的数据库查询在两个例子中都是相同的。所以,就这种表现而言,它们是平等的。但是,前者在第一次使用时需要method_missing查找和动态方法定义,对我而言,读取起来要困难得多,而且对于使用这些参数的查询来说也不是一个好方法。

我会根据个人的可读性来选择'where',但是他们都会输出相同的select查询,所以它确实无关紧要。