9

レコードを返すのに最も速い方法を知りたいのですが。

Class.where(:type => 4).first
Class.find(:first, :conditions => ["type = ?", 4])

実行はまったく同じですか?

4

2 に答える 2

10

順序を気にしないと仮定すると、最もパフォーマンスの高いのは次を使用することfind_byです。

Class.find_by(type: 4)

https://github.com/rubocop-hq/rails-style-guide/issues/76から

このメソッドはRails4に追加され、次のように定義されています。

def find_by(*args)
 where(*args).take
end

だから、あなたの記録の順序に関してとはtake異なります。主キーの順序に従って最初のレコードを返しますが、データベースが最初に吐き出したものはすべて返します。firstfirsttake

したがって、使用することwhere().takeは同等でfind_byあり、どちらを使用するかを選択することは好みの問題ですが、微妙でそれほど明白ではない方法とはwhere().first異なります。find_by

于 2019-06-14T08:41:01.957 に答える
4

どちらも同じクエリを生成します。

最新の情報によると、Rails 3.1では、:conditionsの受け渡しは非推奨になります。

したがって、現時点では、クエリを実行するための最良の方法は次を使用することです。

Class.where(:type => 4).first
于 2012-08-27T03:48:34.383 に答える