Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que o MySQL está retornando os mesmos resultados ao usar RAND() na instrução SELECT?

Semente Rand()


MySQL usa o relógio do sistema para propagar RAND() quando não há segundo valor. O valor da semente está em microssegundos e não consigo reproduzir o problema de RAND() produzindo o mesmo valor duas vezes como você descreve.

Se você abrir o MySQL Workbench e executar duas instruções ao mesmo tempo. A saída é diferente para cada um.
SELECT RAND();
SELECT RAND();

Quando você abre várias guias e obtém os mesmos resultados. É provável que seja um problema de armazenamento em cache, mas você afirma que está carimbando a URL para evitar o armazenamento em cache. Portanto, habilite o log SQL no servidor e verifique se novas consultas estão sendo chamadas.

Desempenho Rand()


ORDER BY RAND() é lento porque requer que o MySQL leia a tabela inteira. Mesmo ORDER BY RAND() LIMIT 1 ainda requer MySQL para ler a tabela inteira.

ATUALIZAÇÃO:

Você pode ver qual é o valor aleatório que o SQL está gerando.
$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";

Isso incluirá a coluna X para cada linha. O valor aleatório usado para ordenar a consulta. Adicione isso à saída e veja se cada navegador é verdadeiramente retornando os mesmos conjuntos de resultados do MySQL.