次の操作のうち、Rails 3.2 でより高速なのはどれですか?
Fact.delete
Fact.new(:balance => 233, :profit_date => Date.now, :comments => "whatever")
また
Fact.update(:balance => 233, :profit_date => Date.now, :comments => "whatever")
次の操作のうち、Rails 3.2 でより高速なのはどれですか?
Fact.delete
Fact.new(:balance => 233, :profit_date => Date.now, :comments => "whatever")
また
Fact.update(:balance => 233, :profit_date => Date.now, :comments => "whatever")
インクルードする 2 つのコード スニペットは、機能する場合、異なることを行います。
クラス自体ではなく、クラスのインスタンスである を呼び出し.new
ているため、最初のコードは機能しません。おそらくメソッドを持っていません。新しい Fact オブジェクトを作成するには、 を使用します。しかし、そうしても ActiveRecord のメソッドはレコードを保存しません。したがって、レコードを削除するだけで、保存はしません。レコードを作成して保存する場合に使用します (またはが続きます)。fact
.new
Fact.new
.new
fact.delete; Fact.new
Fact.create()
fact = Fact.new()
f.save
必要なメソッドの名前.update_attributes
は ではなく であるため、2 番目の部分も機能しません.update
。エラーが発生します。
さて、レコードを削除してから再作成するか、単に更新するかという実際の問題については、どちらが速いかを見つける最良の方法は、自分でベンチマークすることです。これは、データベースの設定方法、データベースに含まれるレコードの数、およびその他のさまざまな要因によって答えが異なるためです。DELETE
続いてINSERT
が よりも遅くなることは私には理にかなっているように思えますがUPDATE
、それは実際にテストすることと同じではありません。
これを非常に多くの回数実行する予定がない限り、どちらの方法もおそらく「十分に高速」です。それを考えると.update_attributes
、コードはより意味があり、読みやすくなるため、相対的なパフォーマンスに関係なく使用します。何度も実行している場合は、何らかの方法で一括更新を行うようにリファクタリングすることで、パフォーマンスが大幅に向上します。