おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

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

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()")