Mysql で、ランダムにレコードを取り出す方法

76de73a1dae79a86bb99a813bd8e8e0a?s=30&d=http%3a%2f%2fkaeruspoon%.net2f2014%2fimages%2fno imageTsukasa OISHI

ActiveRecordで、テーブルからランダムにレコードを取り出すときは、

user = User.find(:first, :order => "RAND()")

みたいにすればいい。SQLは

select * from users order by RAND() limit 1;

というような感じになる。

ただし、レコード数が大きくなると、この order by RAND() がかなり遅くなってしまう。そのときは、ランダムなid値をアプリ側で用意して、

user = User.find(:first, :conditions => ["id = ?", rand_id])

みたいにするといい感じ。
また、selectで取り出すカラムを最小限に抑えると、結構はやくなったりするので、アプリの修正が面倒なときはこれを試してみてもいいかも。

user = User.find(:first, :select => "id", :order => "RAND()")