MySQL の ORDER BY RAND() 関数はランダム選択アルゴリズムですか?
データベース操作の領域では、真にランダムでデータを取得します順序は難問になる可能性があります。 MySQL の ORDER BY RAND() 関数は、長い間この目的に使用されるツールでしたが、その見かけのランダム性の背後にある基礎的なメカニズムは、ややわかりにくいままでした。
ORDER BY RAND() はランダムな列を追加するという想定にもかかわらず、ソート前のテーブルですが、最近の研究ではこれが当てはまらないことが証明されています。代わりに、MySQL は、その意図されたランダム選択を実現するために別の戦略を採用しています。
実際、Jay がブログで提案したクエリは、ランダムな行を取得するための最も効率的な方法であることが証明されています。このクエリは、テーブルの最大 ID 範囲内でランダムな ID を生成するサブクエリとテーブルを結合します。このランダム ID 以上の ID を持つ行にテーブル行をフィルタリングすることにより、クエリはランダムな行を迅速に取得します。
ただし、3 つの同様のクエリの実行時間に関して、独特の観察が行われています。
3 つのクエリはすべて 1 つの列による並べ替えを必要とするため、これらのさまざまな実行時間は直観に反しているように見えます。この不一致はインデックス作成に起因している可能性があります。
2 番目のクエリでは、id 列にインデックスが付けられ、データへの迅速なアクセスが可能になります。ただし、3 番目のクエリにユーザー名などの追加の列を含めると、MySQL が各行を読み取り、これらの値にメモリを割り当てる必要があり、実行時間が大幅に増加します。
結論として、MySQL の ORDER BY RAND() 関数は真のランダム選択アルゴリズム。代わりに、ランダムな ID を生成するサブクエリをテーブルに結合することでランダム性をシミュレートする手法が採用されています。最も効率的なアプローチではありませんが、一見ランダムな順序でデータを取得するための実用的な方法を提供します。
以上がMySQL の ORDER BY RAND() 関数は実際にランダム選択アルゴリズムを使用していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。