かなり大きなデータセットと 2 つの結合を必要とするクエリがあるため、クエリの効率は非常に重要です。結合の結果に基づいて、条件を満たすデータベースから 3 つのランダムな行を取得する必要があります。ここでは、最も明白な解決策が非効率的であると指摘されています。
[これらのソリューション] すべてのテーブルのシーケンシャル スキャンが必要です (各行に関連付けられたランダム値を計算する必要があるため、最小のものを決定できるようにするため)。
ただし、作成者が提案した方法 ( SELECT * FROM table WHERE num_value >= RAND() * (SELECT MAX(num_value) FROM table) LIMIT 1
num_value は ID) は、一部の ID が欠落している可能性があるため (一部の行がユーザーによって削除された可能性があるため)、私には機能しません。
では、私の状況で 3 つのランダムな行を取得する最も効率的な方法は何でしょうか?
編集:ソリューションは純粋な SQL である必要はありません。私もPHPを使っています。