Pregunta

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?

¿Fue útil?

Solución

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.

Otros consejos

This is the best way:

Thing.all.sample(5)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top