レコードを返すのに最も速い方法を知りたいのですが。
Class.where(:type => 4).first
Class.find(:first, :conditions => ["type = ?", 4])
実行はまったく同じですか?
レコードを返すのに最も速い方法を知りたいのですが。
Class.where(:type => 4).first
Class.find(:first, :conditions => ["type = ?", 4])
実行はまったく同じですか?
順序を気にしないと仮定すると、最もパフォーマンスの高いのは次を使用すること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
異なります。主キーの順序に従って最初のレコードを返しますが、データベースが最初に吐き出したものはすべて返します。first
first
take
したがって、使用すること
where().take
は同等でfind_by
あり、どちらを使用するかを選択することは好みの問題ですが、微妙でそれほど明白ではない方法とはwhere().first
異なります。find_by
どちらも同じクエリを生成します。
最新の情報によると、Rails 3.1では、:conditionsの受け渡しは非推奨になります。
したがって、現時点では、クエリを実行するための最良の方法は次を使用することです。
Class.where(:type => 4).first