Question

I'm just trying to load 5 random objects in a rails controller

Thing.all(:limit => 5, :order => "RANDOM()")

Is that the least expensive way to do it?

Était-ce utile?

La solution

Short answer: no.

What you have asked the db to do is: go order the entire thing table in a random order... then grab me five of them. If your thing table has a lot of rows... that's a very expensive operation.

A better option (if the ids are auto-increment and thus likely concurrent) is to generate a set of random ids within the id-range for your thing table and go fetch these individual things by those ids.

Autres conseils

This is the best way:

Thing.all.sample(5)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top