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

大規模な MySQL データベースから単純なランダム サンプルを効率的に抽出するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-05 16:02:44
オリジナル
508 人が閲覧しました

How Can I Efficiently Extract a Simple Random Sample from a Large MySQL Database?

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

問題ステートメント:

データからの単純ランダム サンプル (SRS) の抽出大規模な MySQL データベースを効率的に処理するには、「明白な」アプローチ (SELECT * FROM テーブル) を使用するのは困難な場合があります。 RAND() LIMIT n) による順序。このメソッドの非効率性は、行ごとに RAND() を使用することとその後の並べ替えに起因し、その結果、リソースを大量に消費する O(n lg n) の複雑さが生じます。

効率的な解決策:

このハードルを克服するには、より効率的なアプローチの採用を検討してください:

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

この解決策0 から 1 までの行ごとに乱数を生成し、確率のしきい値 (この場合は 0.3) に基づいてその行を表示するかどうかを評価する機能により、「明白な」メソッドよりも優れたパフォーマンスを発揮します。

説明:

  • O(n) 複雑さ: このメソッドは動作します単純なアプローチの複雑さ O(n lg n) に比べて、行をソートする必要がないため、O(n) 時間で完了します。
  • MySQL の乱数生成: MySQL は優れています。 - 各行に一意の乱数を生成する機能が備わっているため、この方法が実行可能になりますオプション。
  • 仮定: RAND() が均一に分散された数値を生成すると仮定して、ランダム性の仮定がこの解決策の基礎となります。

追加の考慮事項:

  • 制限サンプリング: 希望のサイズのサンプルを確保するには、それに応じて確率のしきい値を調整します。たとえば、200,000 行のテーブルから 10,000 行のサンプルを取得するには、次を使用します。 SELECT * FROM table WHERE RAND()
  • インデックスの最適化: データが頻繁に更新される場合は、挿入/更新時に RAND() の結果をインデックス化して改善することを検討してください。パフォーマンス。

以上が大規模な MySQL データベースから単純なランダム サンプルを効率的に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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