我正在尝试为500k甚至更多现有记录更新新属性的值。
在迁移时,现有记录将该属性值设置为nil,我希望将其设置为false。
首先,我在种子文件中尝试了这个:
non_selected = Bonus.active.ranked.find(:all, conditions: { selected: nil })
non_selected.each { |b| b.update_attribute(:selected, false) }
但这很慢。在基准测量中,这需要大约140s的10k奖励记录。
现在,我改为:
Bonus.active.ranked.update_all( "selected = false", "selected IS NULL" )
对于10k记录需要0.13秒。
但是对于400k记录,更新所有记录需要10秒。
如何改进此查询?