ホームページ >データベース >mysql チュートリアル >MySQL の ORDER BY RAND() 関数は実際にどのように動作するのでしょうか?

MySQL の ORDER BY RAND() 関数は実際にどのように動作するのでしょうか?

DDD
DDDオリジナル
2024-11-03 00:23:02560ブラウズ

How Does MySQL's ORDER BY RAND() Function Actually Work?

MySQL の ORDER BY RAND() 関数の動作

MySQL の ORDER BY RAND() 関数は一見ランダムな結果を生成しますが、実際のメカニズムは異なります一般に信じられている信念から。想定に反して、MySQL は並べ替えに影響を与えるランダム値の列を追加しません。代わりに、次のプロセスが使用されます:

  1. 乱数の生成: この関数は、テーブル内の各行に対して 0 から 1 までの乱数を生成します。
  2. 行の並べ替え: 次に、生成された乱数に基づいて行が昇順に並べ替えられます。
  3. データの取得: ORDER BY RAND() で LIMIT が使用される場合MySQL は、ソートされた結果セットの先頭から行を取得します。

予期しない実行時間

提供されたテスト クエリは、予期しない実行時間を示しています:

Query Execution Time
SELECT * FROM table ORDER BY RAND() LIMIT 1 30-40 seconds
SELECT id FROM table ORDER BY RAND() LIMIT 1 0.25 seconds
SELECT id, username FROM table ORDER BY RAND() LIMIT 1 90 seconds

実行時間のこの変動は、各クエリによって取得されるデータの違いに起因します。行全体 (*) を選択すると、特定の列 (id) のみを取得したり、すでにインデックスが付けられているデータ (id) を取得したりする場合に比べて、コストが高くなります。

高速ランダム選択の代替方法

ORDER BY RAND() は最適なパフォーマンスを提供しない可能性がありますが、代替方法により高速な結果が得られます:

  • ジェイの方法: サブクエリを使用してランダム ID を生成行の選択は効率的ですが、複雑なクエリを扱う場合は煩雑になる可能性があります。
  • プロシージャベースのアプローチ: 有効な行が見つかるまでランダム ID を反復するプロシージャを実装することは効果的な解決策ですが、データに大きなギャップがある問題が発生する可能性があります。

以上がMySQL の ORDER BY RAND() 関数は実際にどのように動作するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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