1. ホーム
  2. mysql

[解決済み] MySQLは600K行からランダムな10行を高速に選択する

2022-03-20 19:48:22

質問

合計600k行からランダムに10行を選択するクエリを書くにはどうしたらよいでしょうか?

どのように解決するのですか?

単純なものから、隙間のあるもの、隙間のある不均一なものまで、いくつかのケースを扱った素晴らしい記事です。

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リストに隙間ができることを想定しています。より高度な例については、この記事を参照してください。