0

最近、 awesome_nested_set gemに大きく依存する既存のプロジェクトの作業を開始し、そのメソッドのいずれかをself_and_descendants使用しました。

このメソッドは、すべての子をプルするという点で重すぎて、多くのクエリをトリガーします。インデックスを作成していますが、このパフォーマンスの問題から抜け出すための代替手段を探しています。

トリガーされる Sql の例

q = Group.first
q.self_and_descendants

上記のコードは以下のクエリをトリガーします。さらに多くのクエリがあり、一部のみが貼り付けられています

  Group::Translation Load (0.3ms)  SELECT `group_translations`.* FROM `group_translations` WHERE `group_translations`.`group_id` = 2231
  Group::Translation Load (0.3ms)  SELECT `group_translations`.* FROM `group_translations` WHERE `group_translations`.`group_id` = 2233
  Group::Translation Load (0.4ms)  SELECT `group_translations`.* FROM `group_translations` WHERE `group_translations`.`group_id` = 2239
  Group::Translation Load (0.3ms)  SELECT `group_translations`.* FROM `group_translations` WHERE `group_translations`.`group_id` = 2240
  Group::Translation Load (0.3ms)  SELECT `group_translations`.* FROM `group_translations` WHERE `group_translations`.`group_id` = 2241
  Group::Translation Load (0.3ms)  SELECT `group_translations`.* FROM `group_translations` WHERE `group_translations`.`group_id` = 2242
  Group::Translation Load (0.3ms)  SELECT `group_translations`.* FROM `group_translations` WHERE `group_translations`.`group_id` = 2252
4

1 に答える 1

0

しばらく時間を費やした後、返信はありません。:)私はこれをやって上陸しました。

class Group < ActiveRecord::Base
acts_as_nested_set

 def self_and_descendants_hashed
    ActiveRecord::Base.connection.select_all("SELECT * FROM groups WHERE lft >= #{self.lft} AND rgt <= #{self.rgt} order by lft")
  end
end
于 2013-06-28T10:47:18.770 に答える