我正在使用Ruby on Rails 3,我想知道这些查询语句的性能差异是什么:
# Case 1
accounts = ids.map { |id| Account.find_by_id(id) }
# Case 2
accounts = ids.map { |id| Account.where(:id => id).first }
还有另一种方法可以做得更好吗? 如果ids
为100 ,我怎样才能限制搜索,直到帐号为5?< /强>
答案 0 :(得分:5)
正如@RubyFanatic所说,这两者之间没有真正的区别(他们都会生成相同的查询),但有一种更好的方法:
accounts = Account.where(:id => ids)
这将生成类似select * from accounts where accounts.id in (1,2,3)
的sql,并且比一次找到一个快得多。
如果你只想使用id数组中的5个id,你需要决定使用哪个5。例如,如果您想使用前5;
accounts = Account.where(:id => ids[0..4])
或者,你可以使用limit,但这使得如果id数组很大,查询还需要做更多的工作:
accounts = Account.where(:id => ids).limit(5)
答案 1 :(得分:1)
这两个查询应该没有性能差异。他们确实在做同样的事情。第二个声明可能会稍微慢一点,但它太微不足道了,甚至不重要。