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.