ホームページ >データベース >mysql チュートリアル >大規模な MySQL テーブルから 10 個のランダムな行を効率的に選択するにはどうすればよいですか?

大規模な MySQL テーブルから 10 個のランダムな行を効率的に選択するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-23 23:51:11545ブラウズ

How Can I Efficiently Select 10 Random Rows from a Large MySQL Table?

大規模な 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。