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

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

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-05 21:01:42582ブラウズ

How Can I Efficiently Perform Simple Random Sampling in MySQL?

MySQL データベースでの効率的な単純なランダム サンプリング

大規模なデータベースからのデータのサンプリングは、多くの場合、統計分析やさらなる処理のためのサブサンプリングに必要です。よく遭遇する問題の 1 つは、数百万行を含む MySQL データベースから単純なランダム サンプルを選択することです。

SELECT * FROM table ORDER BY RAND() LIMIT 10000 の単純なアプローチでは、次の処理が必要なため、パフォーマンスに重大なオーバーヘッドが発生します。テーブル全体を並べ替えます。テーブル サイズが大きくなるにつれて、このアプローチは法外に遅くなります。

効率的な解決策

より効率的なアプローチは、MySQL の乱数を生成する機能を活用することです。クエリ SELECT * FROM table WHERE rand() <= .3 は簡単な解決策を提供します。

  • rand(): 0 と 1 の間のランダムな浮動小数点を生成します。
  • < = .3: 乱数が 0.3 以下の行をフィルターし、効率的にサンプルの約 30% を選択します。 table.

このアプローチにはいくつかの利点があります。

  • O(n) 複雑さ: ソートを必要とせず、テーブルを 1 回だけ反復処理します。
  • 一様分布: rand() は一様分布で数値を生成します。テーブル全体の公平な表現を保証します。
  • MySQL の最適化: MySQL は、乱数を効率的に生成するために最適化されています。

テーブルのより大きなサブセットをサンプリングすることによって(例: 必要なサンプル サイズの 2 ~ 5 倍)、挿入または更新時にランダムな列にインデックスを付け、そのインデックスでフィルタリングすると、さらにサンプリングプロセスを最適化します。この方法には、インデックス スキャンのパフォーマンスの利点があり、サンプル サイズの精度が向上します。

要約すると、SELECT * FROM table WHERE rand()

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

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