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

SELECTステートメントでRAND()を使用しているときに、MySQLが同じ結果を返すのはなぜですか?

    Rand()シード

    MySQLはシステムクロックを使用してRAND()をシードします 2番目の値がない場合。シード値はマイクロ秒単位であり、RAND()の問題を再現できません。 説明と同じ値を2回生成します。

    MySQL Workbenchを開いて、2つのステートメントを同時に実行した場合。出力はそれぞれ異なります。

    SELECT RAND();
    SELECT RAND();
    

    複数のタブを開いて同じ結果が得られた場合。キャッシュの問題である可能性がありますが、キャッシュを防ぐためにURLにスタンプを付けていると述べています。したがって、サーバーでSQLロギングを有効にし、新しいクエリが呼び出されていることを確認します。

    Rand()パフォーマンス

    ORDER BY RAND() MySQLがテーブル全体を読み取る必要があるため、低速です。 ORDER BY RAND() LIMIT 1 それでも、MySQLがテーブル全体を読み取る必要があります。

    更新:

    SQLが生成しているランダムな値を確認できます。

    $query = "SELECT *, RAND() AS `X`
              FROM customers
              WHERE customer_group='consumables' AND customer_updated < DATE_SUB(NOW(), INTERVAL 1 DAY)
              ORDER BY `X`
              LIMIT 10";
    

    これには、列Xが含まれます 行ごとに。クエリの順序付けに使用されるランダムな値。これを出力に追加して、各ブラウザが本当にであるかどうかを確認します MySQLから同じ結果セットを返します。



    1. CSVファイルをmysqlデータベースに保存します

    2. Microsoft SQL Serverでシーケンスをどのように実装しますか?

    3. SQLクエリの実行順序

    4. SQL Serverが存在しない場合使用法?