データが変更されていないテーブルからランダムな行を取得しようとしています。大規模なデータセットにはひどく、拡張性が良くないORDER BY RAND()を試してみる人がいることを読みました。
また、SQLで最小/最大範囲のランダムな行を取得するという解決策も見てきました:FLOOR(MAX(needed_id)* RAND)しかし、これは行が連続している場合にのみ機能します:1,2、 3,4,5,6,7,8,9,10。
引き出す必要のあるデータはシーケンシャルではありません。例:1、2、3、4、10、11、12、13
だから私は2つの解決策があると思っています:
最初の解決策: これを実行し続けます:FLOOR(MAX(needed_id)* RAND)正しいタイプの行を受け取るまで(1/6の確率)
2番目の解決策:次 のように(データが変更されないため)複製テーブルを作成します。
temp_id | needed_id | type
1 1 1
2 4 1
3 7 2
3 8 2
したがって、次のメソッドを使用してランダムなtemp_idを引き出すことができます。FLOOR(MAX(temp_id)* RAND)-WHERE type = 1
どう思いますか?正しい行を受け取るまで、最初のソリューションを約6回実行する可能性がありますが、2番目のソリューションではすぐに機能しますが、別のテーブルが必要です。