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

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

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-05 16:03:43561ブラウズ

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

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