ActiveRecord :: Relation转换为hash slow

时间:2015-01-19 03:02:38

标签: ruby-on-rails ruby hash

我从数据库中查询 5000 记录,然后转换为Hash,'marker_id'作为键,如果'marker_id'相同,则将它们放入Array中。但转换为Hash时速度很慢。

      total_attrs=MarkerAttr.where(marker_layer_id: layer.id)
      temp_attrs={}
      t=Time.now

      for ta in total_attrs
        if !temp_attrs.has_key?(ta.marker_id)
          temp_attrs["#{ta.marker_id}"]=[]
        end
        temp_attrs["#{ta.marker_id}"].push(ta)
      end
      p "to_hash_time::#{Time.now-t}"
      # TODO:: to_hash_time::1.563641124 

谢谢

1 个答案:

答案 0 :(得分:1)

嗯。我想知道Enumerable#group_by是否会更快。试试这个:

 total_attrs = MarkerAttr.where(marker_layer_id: layer.id).all
 temp_attrs = total_attrs.group_by(&:marker_id)