ランダムにレコードを取得する。order by RAND()の高速化

アプリケーションでランダムな数字を作って、そのIDのレコードを取得する方法ではなく、

SQLだけでやってみたい

order by RAND() limit 1  これで、できるようです。
order by RAND()は遅くなるので、注意が必要です。

そこで、idでランダムに取得するには、
select id,name from table1 order by RAND() limit 5
ではなく、
select id,name from
(select id from table1 order by RAND()) as rnd
left outer join table1 on rnd.id = table1.id
limit 5
とする。
先にインデックスのついたidで単純にランダムに並び替え、そこに情報を付加するという考え方だと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です