データベースに約2milのレコードがあり、xレコードのランダムなセットを頻繁に取得する必要があります。私のデータベースが約50のレコードで構成されていたとき、私は次のことを使用しました。
Product.all.sample(5)
しかし、これは私の記録数では非常にコストがかかります。
データベースのサイズを指定して、レコードの小さなサンプルを効率的に見つけるにはどうすればよいですか。
データベースに約2milのレコードがあり、xレコードのランダムなセットを頻繁に取得する必要があります。私のデータベースが約50のレコードで構成されていたとき、私は次のことを使用しました。
Product.all.sample(5)
しかし、これは私の記録数では非常にコストがかかります。
データベースのサイズを指定して、レコードの小さなサンプルを効率的に見つけるにはどうすればよいですか。
1つのオプションは、はるかに少ない製品セットを入手することです。最初にすべての製品を取得してから、ランダムに5つを選択するため、現在実行していることにはコストがかかります。
Product.limit(100).sample
ただし、同じ100個の製品セットを返品するため、これは理想的ではありません。
代わりに、すべてをまとめて削除し、.sample
ActiveRecordに5つの製品のランダムなセットを要求することができます
Product.order("RAND()").limit(5)
パフォーマンスの問題をRailsから移動した一方で、MySQLに移動しました。この場合、「RAND()」は大規模なデータセットではまだかなり低速です。
この質問には、あなたの問題に関連する答えがたくさんあり、役立つはずです。