-2

以下哪个操作在 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")
4

1 回答 1

0

如果它们有效,您包含的两个代码片段会做不同的事情:

第一段代码不起作用,因为您正在调用.newon fact,它是类的实例,而不是类本身。它可能没有.new方法,如果有,它可能不会做你想做的事。要创建一个新的 Fact 对象,您可以使用Fact.new. 但即使你这样做了,ActiveRecord 的.new方法也不会保存记录。因此,fact.delete; Fact.new只删除记录,不保存记录。如果Fact.create()要创建和保存记录(或fact = Fact.new()后跟f.save),请使用。

第二件也行不通,因为你想要的方法是 named .update_attributes,而不是.update。你会得到一个错误。

现在,关于哪个更快的实际问题,删除一条记录然后重新创建它或只是更新它:找到两件事中哪一个更快的最佳方法是自己对其进行基准测试。这是因为答案将取决于您的数据库是如何设置的,它有多少记录,以及任何数量的其他因素。在我看来,DELETE随后的INSERT速度会比 慢UPDATE,但这与实际测试它不同,而且我所做的任何测试都将基于我的数据库设置而不是你的。

除非您打算多次这样做,否则这两种方法都可能“足够快”。鉴于此,.update_attributes无论它的相对性能如何,我都会使用它,因为这样代码会更有意义并且更具可读性。如果您多次这样做,您将通过重构以某种方式进行批量更新,从而获得更大的性能提升

于 2013-03-14T15:43:20.037 回答