sql >> データベース >  >> RDS >> Mysql

MySQL ORDER BY RAND()関数はいつ注文しますか?

    そうです、WHERE、GROUP BY、およびHAVINGで行数を減らした後、ORDERBYが適用されます。ただし、LIMITの前にORDERBYが適用されます。

    したがって、行数を十分にフィルタリングすると、そうです。ORDERBY RAND()は、パフォーマンスに大きな影響を与えることなく、目的を達成できる可能性があります。シンプルで読みやすいコードには正当な利点があります。

    考えると問題が発生します クエリは行を小さいものに減らす必要がありますが、データが大きくなるにつれて、ソートする必要のある行の数は再び大きくなります。クエリはソートされた結果に対してLIMIT10を実行するため、500k行でORDER BY RAND()を実行しているという事実が隠されます。パフォーマンスが不思議に悪化しているのがわかります。

    私は自分の本でランダムな行を選択するための代替方法について書いています SQLアンチパターン:回避データベースプログラミングの落とし穴 、またはスタックオーバーフローに関する他の回答:



    1. MySQLをループして、テーブルにデータを挿入します

    2. MySQLで月ごとにグループ化する方法

    3. Where句でAliasを使用する方法は?

    4. 最後の行のみを表示するPHPWhileループ