Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi MySQL renvoie-t-il les mêmes résultats lors de l'utilisation de RAND() dans l'instruction SELECT ?

Graine Rand()

MySQL utilise l'horloge système pour amorcer RAND() lorsqu'il n'y a pas de deuxième valeur. La valeur de départ est en microsecondes, et je ne peux pas reproduire le problème de RAND() produisant la même valeur deux fois que vous décrivez.

Si vous ouvrez MySQL Workbench et exécutez deux instructions en même temps. La sortie est différente pour chacun.

SELECT RAND();
SELECT RAND();

Lorsque vous ouvrez plusieurs onglets et obtenez les mêmes résultats. Il s'agit probablement d'un problème de mise en cache, mais vous indiquez que vous tamponnez l'URL pour empêcher la mise en cache. Activez donc la journalisation SQL sur le serveur et vérifiez que de nouvelles requêtes sont appelées.

Performances Rand()

ORDER BY RAND() est lent car il nécessite que MySQL lise toute la table. Pair ORDER BY RAND() LIMIT 1 nécessite toujours MySQL pour lire la table entière.

MISE À JOUR :

Vous pouvez voir quelle est la valeur aléatoire générée par 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";

Cela inclura la colonne X pour chaque rangée. La valeur aléatoire utilisée pour ordonner la requête. Ajoutez ceci à la sortie et voyez si chaque navigateur est vraiment renvoyant les mêmes ensembles de résultats depuis MySQL.