重複の可能性:
MySQL でランダムな行を選択するにはどうすればよいですか?
さて、ゲーム データを格納するテーブルがあり、700 万行に達しています。
ランダムな行を選択する効率的な方法が必要です。
これが私がこれまでに試したことです:
SELECT `id` FROM `information` ORDER BY RAND() LIMIT 1;
かなり論理的なクエリ。実行には 8 秒かかります。完全に受け入れられません。
2 回目の試行:
SELECT FLOOR(RAND()*COUNT(`id`)) INTO @target FROM `information`;
SELECT `id` FROM `information` LIMIT @target,1;
2 番目のクエリの変数の構文エラーで失敗します。
3 回目の試行:
SELECT `id` FROM (SELECT `id` FROM `information`) `a` ORDER BY RAND() LIMIT 1
ここでのアイデアは、他のすべてのフィールドを削除することです。これらは不要なバルクであるためです。半分は機能し、時間が 6 秒に短縮されます。それでも長すぎるけど。
そして…出ました。他の方法は考えられません(ただし、午前1時です...)ので、提案をいただければ幸いです。ありがとう!