MySQL は 600K 行から 10 行をランダムに選択します 質問する

MySQL は 600K 行から 10 行をランダムに選択します 質問する

合計 600k 行からランダムに 10 行を選択するクエリを最も効果的に記述するにはどうすればよいでしょうか?

ベストアンサー1

単純なケースからギャップのあるケース、ギャップのある非均一なケースまで、さまざまなケースを扱う素晴らしい投稿です。

http://jan.kneschke.de/projects/mysql/order-by-rand/

最も一般的なケースでは、次のように行います。

SELECT name
  FROM random AS r1 JOIN
       (SELECT CEIL(RAND() *
                     (SELECT MAX(id)
                        FROM random)) AS id)
        AS r2
 WHERE r1.id >= r2.id
 ORDER BY r1.id ASC
 LIMIT 1

これは、IDの分布が均等であり、IDリストにギャップが存在する可能性があることを前提としています。より高度な例については、記事を参照してください。

おすすめ記事