合計 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リストにギャップが存在する可能性があることを前提としています。より高度な例については、記事を参照してください。