【问题标题】:Performance tuning for rails active record queryingRails 活动记录查询的性能调整
【发布时间】:2014-03-11 11:44:59
【问题描述】:

我有多个模型的 rails 应用程序。例如具有以下关联的模型输入 :-

belongs_to :department, :class_name => 'Department'

has_many :frame_inputs, class_name: 'Frames::FrameInput', foreign_key: 'input_id', :dependent => :destroy
has_many :frames, :through => :frame_inputs, :class_name => 'Frames::Base'

has_many :scales, :foreign_key => :input_id, :dependent => :destroy
has_many :input_items, :class_name => 'InputItems::Base', :foreign_key => :department_id, :dependent => :destroy
has_many :linenumbers, :class_name => 'Frames::InputItemPriority', :through => :input_items

挑战:- 每当尝试从应用程序中删除输入记录时,后端活动记录查询需要大量时间,即完成一个事务需要 10 - 20 秒。

问题:- 由于它必须销毁所有记录依赖项,我可以减少执行删除/销毁查询的事务时间吗?

为了销毁记录,我在输入控制器中有以下方法

def destroy
 @input.destroy
end

请指导我如何优化销毁查询以减少事务时间。

谢谢

【问题讨论】:

    标签: ruby-on-rails performance postgresql activerecord querying


    【解决方案1】:

    :destroy 实际上会实例化关联的记录并触发回调,因此它比使用:delete_all 的成本要高得多。

    如果您没有任何需要重新运行的回调,并且只需要删除关联的记录,请使用后者。

    请看这里:Rails :dependent => :destroy VS :dependent => :delete_all

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多