制作Rails #destroy_all运行得更快

Ped*_*olo 4 ruby activerecord ruby-on-rails arel

我想运行Alarm.destroy_all,虽然每个报警被关联到很多AlarmEvents,而每个AlarmEvent被关联到很多AlarmEvent::MeasurementS,既是协会标记为:dependent=>destroy

所以,当我调用Alarm.destroy all时,这个invokation需要很长时间才能运行.有什么方法可以让它更快吗?怎么样?

到现在为止,我已经尝试过Alarm.joins(:alarm_events).destroy_all,但仍然很慢.

tad*_*man 13

更快的替代方案destroy_all是,delete_all但这不会追逐并破坏任何依赖关系,也不会触发任何before_destroyafter_destroy钩子.

如果你真的关心速度,你可能会考虑到这一点重写它.您甚至可以将其设置为一系列条件:

Alarm.delete_all(:id => alarm_ids)
AlarmEvent.delete_all(:alarm_id => alarm_ids)
Run Code Online (Sandbox Code Playgroud)