ホームページ > データベース > mysql チュートリアル > MySQL で単純なランダム サンプリングを効率的に実行するにはどうすればよいですか?

MySQL で単純なランダム サンプリングを効率的に実行するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-05 16:03:43
オリジナル
558 人が閲覧しました

How to Efficiently Perform Simple Random Sampling in MySQL?

MySQL での効率的な単純なランダム サンプリング

多くのアプリケーションでは、大規模なデータベース テーブルから単純なランダム サンプルを抽出する機能が必要です。ただし、一見直観的な SELECT * FROM table ORDER BY RAND() LIMIT 10000 の方法を使用すると、数百万行のテーブルでは法外に遅くなる可能性があります。

より高速な解決策

より効率的なアプローチは、 rand() 関数を使用して各行に乱数を割り当て、これに基づいてテーブルをフィルタリングすることです。 number:

SELECT * FROM table WHERE rand() <= 0.3
ログイン後にコピー

仕組み

このメソッドは、行ごとに 0 から 1 までの乱数を生成します。この数値が 0.3 (30%) 以下の場合、その行がサンプルとして選択されます。

利点

  • O(n) 複雑さソート不要
  • MySQL の組み込み rand() 関数を利用して効率的な数値を取得します世代

改良版

さらに効率を高めるには、目的のサンプル サイズの 2 ~ 5 倍まで行をサンプリングし、インデックスを作成し、結果を目的のサイズにトリミングします:

SELECT COUNT(*) FROM table; -- Use this to determine rand_low and rand_high

SELECT *
FROM table
WHERE frozen_rand BETWEEN %(rand_low)s AND %(rand_high)s
ORDER BY RAND() LIMIT 1000
ログイン後にコピー

このメソッドはインデックス スキャンを使用してデータのサイズを削減します。ソート前なので、大きなテーブルに適しています。

以上がMySQL で単純なランダム サンプリングを効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート