ホームページ >データベース >mysql チュートリアル >ORDER BY RAND() を使用せずに MySQL から複数のランダムな行を効率的に取得するにはどうすればよいですか?
複数のランダムな結果を取得するための代替手段を検討します
MySQL の ORDER BY RAND() 関数は、ランダムな結果を直接取得する方法を提供しますが、ランダム データの複数行を効率的に選択することはできません。この記事では、そのようなクエリを最適化するための代替手法を検討します。
最適化ソリューション: インデックス列とサブクエリの使用
ランダムな結果を求めるクエリの場合、パフォーマンスの最適化が重要です。効果的な革新的なアプローチの 1 つは、インデックス付き列とサブクエリを組み合わせて使用することです。この手法は、ランダム化プロセスを特定の条件に分離することで、処理のオーバーヘッドを大幅に削減します。
手順:
例:
次のクエリを考えてみましょう:
<code class="language-sql">SELECT u.id, p.photo FROM users u, profiles p WHERE p.memberid = u.id AND p.photo != '' AND (u.ownership=1 OR u.stamp=1) ORDER BY RAND() LIMIT 18 </code>
最適化されたクエリ:
<code class="language-sql">SELECT g.* FROM table g JOIN (SELECT id FROM table WHERE RAND() < (SELECT ((4 / COUNT(*)) * 10) FROM table) ORDER BY RAND() LIMIT 4) AS z ON z.id= g.id</code>
利点:
注:
この最適化方法は、サブクエリとメインクエリの間の一貫性に依存して、正確な結果が返されるようにします。さらに、ランダム化された結果のパーセンテージに対して適切な制限を選択すると、パフォーマンスを維持するのに役立ちます。
以上がORDER BY RAND() を使用せずに MySQL から複数のランダムな行を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。