sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué MySQL devuelve los mismos resultados al usar RAND() en la instrucción SELECT?

Semilla Rand()

MySQL usa el reloj del sistema para generar RAND() cuando no hay un segundo valor. El valor inicial está en microsegundos y no puedo reproducir el problema de RAND() produciendo el mismo valor dos veces como usted describe.

Si abre MySQL Workbench y ejecuta dos declaraciones al mismo tiempo. La salida es diferente para cada uno.

SELECT RAND();
SELECT RAND();

Cuando abres varias pestañas y obtienes los mismos resultados. Es probable que sea un problema de almacenamiento en caché, pero afirma que está sellando la URL para evitar el almacenamiento en caché. Así que habilite el registro de SQL en el servidor y verifique que se llamen nuevas consultas.

Rendimiento Rand()

ORDER BY RAND() es lento porque requiere que MySQL lea toda la tabla. Incluso ORDER BY RAND() LIMIT 1 aún requiere MySQL para leer toda la tabla.

ACTUALIZACIÓN:

Puede ver cuál es el valor aleatorio que está generando 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";

Eso incluirá la columna X por cada fila. El valor aleatorio utilizado para ordenar la consulta. Agregue esto a la salida y vea si cada navegador es verdaderamente devolviendo los mismos conjuntos de resultados de MySQL.