以下哪个操作在 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")
你包含的两个代码片段如果有效,它们会做不同的事情:
第一段代码不起作用,因为您是在 fact
上调用 .new
,这是类的实例,而不是类本身。它可能没有.new
方法,如果有,它可能不会做你想要的。若要创建新的事实对象,应使用 Fact.new
。但即使这样做,ActiveRecord 的 .new
方法也不会保存记录。因此,fact.delete; Fact.new
只删除记录,也不会保存记录。如果要创建和保存记录(或fact = Fact.new()
后跟 f.save
(,请使用 Fact.create()
(。
第二部分也不起作用,因为您想要的方法命名为 .update_attributes
,而不是 .update
。你会得到一个错误。
现在,关于哪个更快的实际问题,删除记录然后重新创建它或只是更新它:找到两件事中哪一个更快的最好方法是自己进行基准测试。这是因为答案将取决于您的数据库的设置方式、其中有多少条记录以及任何其他因素。在我看来,DELETE
后跟INSERT
会比UPDATE
慢似乎是明智的,但这与实际测试它不同,我所做的任何测试都将基于我的数据库设置而不是您的。
除非您打算多次执行此操作,否则这两种方法都可能"足够快"。鉴于此,无论相对性能如何,我都会使用 .update_attributes
,因为这样代码会更有意义并且更具可读性。如果您多次这样做,则通过重构以某种方式进行批量更新,您将获得更大的性能提升。