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

ランダムな結果を返します(rand()による順序)

    RAND()で注文する理由 遅くなる可能性があるのは、何かを返す前にデータベースにテーブル全体を実際にソートするように強制していることです。負荷を単一のテーブルスキャンに減らすだけで、はるかに高速になります(それでも多少遅いですが)。

    これは、注文を回避するだけで途中で取得できることを意味します:

      SELECT *
        FROM my_table
       WHERE RAND() < 0.1
    ORDER BY RAND()
       LIMIT 100
    

    これにより、テーブル内のすべての行の約1%が選択され、並べ替えられて上位100が返されます。ここでの主な問題(および@cmdの回答)は、クエリが返されることを確認できないことです。何でも。

    上記のアプローチでは、テーブル全体のスキャン(使用する行を決定するため)に続いて、行の約1%をスキャンする必要があります。行が多い場合は、それに応じてパーセンテージを減らすことができます。



    1. SQLite EXISTS

    2. MySQLサービスウィンドウを停止します

    3. データベースモデルの現実化:ブロガーの課題

    4. Spotlight Tuning Pack Basic:最高の無料SQL最適化ツール