Mysql
 sql >> Database >  >> RDS >> Mysql

Perché MySQL restituisce gli stessi risultati mentre utilizza RAND() nell'istruzione SELECT?

Seme Rand()

MySQL usa l'orologio di sistema per eseguire il seeding di RAND() quando non c'è un secondo valore. Il valore del seme è in microsecondi e non riesco a riprodurre il problema di RAND() producendo lo stesso valore due volte come descrivi.

Se apri MySQL Workbench ed esegui due istruzioni contemporaneamente. L'output è diverso per ciascuno.

SELECT RAND();
SELECT RAND();

Quando apri più schede e ottieni gli stessi risultati. È probabile che si tratti di un problema di memorizzazione nella cache, ma affermi che stai timbrando l'URL per impedire la memorizzazione nella cache. Quindi abilita la registrazione SQL sul server e verifica che vengano chiamate nuove query.

Rendimento Rand()

ORDER BY RAND() è lento perché richiede a MySQL di leggere l'intera tabella. Anche ORDER BY RAND() LIMIT 1 richiede ancora MySQL per leggere l'intera tabella.

AGGIORNAMENTO:

Puoi vedere qual è il valore casuale generato da 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";

Ciò includerà la colonna X per ogni riga. Il valore casuale utilizzato per ordinare la query. Aggiungilo all'output e verifica se ogni browser è veramente restituendo gli stessi set di risultati da MySQL.