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から同じ結果セットを返します。