在Rails 3.2中,以下哪项操作更快
Fact.delete
Fact.new(:balance => 233, :profit_date => Date.now, :comments => "whatever")
OR
Fact.update(:balance => 233, :profit_date => Date.now, :comments => "whatever")
答案 0 :(得分:0)
两个代码段如果有效,你的include会做不同的事情:
第一段代码无效,因为您在.new
上调用fact
,这是类的实例,而不是类本身。它可能没有.new
方法,如果有,它可能不会做你想要的。要创建新的Fact对象,请使用Fact.new
。但即使你这样做,ActiveRecord的.new
方法也不会保存记录。因此,fact.delete; Fact.new
仅删除记录,而不保存记录。如果您要创建和保存记录(或Fact.create()
后跟fact = Fact.new()
),请使用f.save
。
第二部分也不起作用,因为您想要的方法名为.update_attributes
,而不是.update
。你会收到一个错误。
现在,关于哪个更快的实际问题,删除记录然后重新创建它或只是更新它:找到两件事中哪一件更快的最好方法是自己进行基准测试。这是因为答案取决于数据库的设置方式,数据库中包含的记录数以及其他许多因素。我认为DELETE
后跟INSERT
比UPDATE
要慢,但这与实际测试它不一样,我做的任何测试都将基于< em>我的数据库设置而不是你的。
除非你计划这么做很多次,否则两种方法都可能“足够快”。鉴于此,我会使用.update_attributes
而不管它的相对性能,因为代码会更有意义并且更具可读性。如果你 多次这样做,那么通过重构以某种方式进行批量更新,你将获得更大的性能提升。