重複の可能性:
mysql の大きなテーブルからランダムな行をすばやく選択する
このようなクエリを使用してランダムな行がプルされるのを見てきましたが、これは大規模なデータ セットでは非常に非効率的です。
SELECT id FROM table ORDER BY RANDOM() LIMIT 1
また、MySQL では機能しない RDBMS 固有のソリューションを他にもいくつか見てきました。
私が考えられる最良の方法は、2 つのクエリを使用して、このようなことを行うことです。
- テーブルの行数を取得します。MyISAM テーブルには行数が格納されるため、これは非常に高速です。
- 0 と rowcount - 1 の間の乱数を計算します。
- LIMIT 乱数 1 を使用して、主キー順に並べられた行を選択します
SQLは次のとおりです。
SELECT COUNT(*) FROM table;
SELECT id FROM table LIMIT randnum, 1;
誰かがより良いアイデアを持っていますか?