On 5 March 2014 00:32, John Merlino <stoici...@aol.com> wrote: > Initially, I was using this query: > > > report_ids = [] > if units.size > 0 > units.map(&:id).uniq.each do |id| > report_id = Report.select(:id).where(unit_id: id).order("time > desc").first > unless report_id.nil? > report_ids << report_id > end > end > end > reports = Report.where(id: report_ids).order("longitude desc") > > It looks sloppy, and it took around 7 or 8 seconds to load all the data. > > So I wanted to create a cleaner, quicker query, so I tried this: > > reports = Report.find_by_sql(["SELECT DISTINCT ON (unit_id) r.* > FROM reports r > WHERE r.unit_id IN (?) > ORDER BY unit_id, time DESC", > units.map(&:id)]) > > But this is running incredibly slow. In fact, after 15 minutes, I just > cancelled the process. > > > Any idea why the second query is taking markedly longer than the first?
No, but have you got indexes on unit_id and time? Colin -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscr...@googlegroups.com. To post to this group, send email to rubyonrails-talk@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/CAL%3D0gLs%2B6A94%2BeAYiffeSc2T_3KaJxC8iNNnSw5H2sfwGy%2BY2A%40mail.gmail.com. For more options, visit https://groups.google.com/groups/opt_out.