ホームページ >データベース >mysql チュートリアル >大規模な MySQL テーブルから 10 個のランダムな行を効率的に選択するにはどうすればよいですか?
大規模な MySQL テーブルでのランダム行選択の最適化
かなりの MySQL テーブル (600,000 行など) から 10 行をランダムに抽出するには、速度と効率を優先する戦略が必要です。 ORDER BY RAND()
を使用する単純なアプローチは、大規模なデータセットに対して遅いことで有名です。 より効果的な方法を以下に概説します:
次のクエリは、大幅に高速なソリューションを提供します。
<code class="language-sql">SELECT name FROM random WHERE id >= (SELECT FLOOR(RAND() * MAX(id)) FROM random) ORDER BY id LIMIT 10;</code>
このクエリは、最初に id
を使用して FLOOR(RAND() * MAX(id))
列の範囲内でランダムな開始点を決定することで機能します。 次に、id
がこのランダムな開始点以上である行を選択します。 最後に、結果を id
で並べ替え、出力を 10 行に制限します。 これにより、ORDER BY RAND()
に固有のテーブル全体のスキャンが回避され、パフォーマンスが大幅に向上します。 このアプローチにより、テーブル全体にランダムな行が比較的均等に分散されます。
以上が大規模な MySQL テーブルから 10 個のランダムな行を効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。