Ruby on Rails
Friday, July 26, 2013
Hello all!
Background: I have a table consisting of roughly 14k rows running on postgresql. I want to do this in a performance friendly way.
y TimedAsset.count(1.6ms) SELECT COUNT(*) FROM "timed_assets"--- 13982
y TimedAsset.pluck(:id).count(7.5ms) SELECT "timed_assets"."id" FROM "timed_assets"--- 13982
This shows me that pluck is indeed going over all the rows.
y TimedAsset.first.idTimedAsset Load (0.7ms) SELECT "timed_assets".* FROM "timed_assets" ORDER BY "timed_assets"."id" ASC LIMIT 1--- 44
Shows me the first row contains an ID of 44
y TimedAsset.pluck(:id).first(5)(7.2ms) SELECT "timed_assets"."id" FROM "timed_assets"---- 5700- 5701- 5702- 5703- 5704
I would expect the first ID would be 44, not 5700, so I assume that pluck gives me an un-ordered list?
y TimedAsset.order("id").pluck(:id).last(10)(14.4ms) SELECT "timed_assets"."id" FROM "timed_assets" ORDER BY id---- 14047- 14048- 14049- 14050- 14051- 14052- 14053- 14054- 14055- 14056
So instead, it seems I have to order the entire table first, then pluck, and then getting the last few rows. This seems extremely inefficient since I have to order all rows of it first, even though I am specifically using pluck over select for performance and memory reasons. Does anyone have any suggestions or ideas for a higher performance method of getting the a specific column of the last few rows of a table ordered by the primary key? I also extremely reccomend mentioning in the pluck API documentation that pluck returns an un-ordered list so others do not fall into the same mistake I did.
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+unsubscribe@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/2dbaf2d2-9fdc-40ab-9513-c01e723709ad%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment