約 700 万のレコードを保持するテーブルから 4 つのランダムな結果を取得しようとしています。さらに、同じテーブルから、カテゴリ別にフィルター処理された 4 つのランダム レコードも取得したいと考えています。
ここで、この大きなテーブルでランダムな並べ替えを実行すると、クエリに数秒かかることが想像できますが、これは理想的ではありません。
結果セットについて私が考えたもう1つの方法は、non-filtered
PHPに1〜7,000,000程度の乱数を選択させIN(...)
、クエリを実行してそれらの行のみを取得することです-そして、はい、このメソッドにはその ID を持つレコードが存在しなくなった場合、4 未満になる可能性があることに注意してください。
ただし、PHP はどのレコード番号がどのカテゴリに属しているかがわからないため、選択するレコード番号を選択できないため、上記の方法は明らかにカテゴリ フィルタリングでは機能しません。
これを行うことができるより良い方法はありますか?私が考えることができる唯一の方法は、各カテゴリのレコード ID を別のテーブルに保存し、そこからランダムな結果を選択してから、セカンダリ クエリでメイン テーブルからそれらのレコード ID のみを選択することです。しかし、もっと良い方法があると確信しています!?