sql >> Database >  >> RDS >> Mysql

Waarom retourneert MySQL dezelfde resultaten bij het gebruik van RAND() in de SELECT-instructie?

Rand() zaad

MySQL gebruikt de systeemklok om RAND() te seeden wanneer er geen tweede waarde is. De seed-waarde is in microseconden en ik kan het probleem van RAND() . niet reproduceren twee keer dezelfde waarde produceren als u beschrijft.

Als u MySQL Workbench opent en twee instructies tegelijkertijd uitvoert. De uitvoer is voor elk verschillend.

SELECT RAND();
SELECT RAND();

Wanneer u meerdere tabbladen opent en dezelfde resultaten krijgt. Het is waarschijnlijk een caching-probleem, maar u geeft aan dat u de URL stempelt om caching te voorkomen. Schakel dus SQL-logboekregistratie in op de server en controleer of er nieuwe zoekopdrachten worden aangeroepen.

Rand()-prestaties

ORDER BY RAND() is traag omdat het MySQL vereist om de hele tabel te lezen. Zelfs ORDER BY RAND() LIMIT 1 vereist nog steeds MySQL om de hele tabel te lezen.

UPDATE:

U kunt zien wat de willekeurige waarde is die SQL genereert.

$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";

Dat omvat de kolom X voor elke rij. De willekeurige waarde die wordt gebruikt om de query te ordenen. Voeg dit toe aan de uitvoer en kijk of elke browser echt is dezelfde resultaatsets retourneren vanuit MySQL.



  1. Hoe percentage te berekenen met een SQL-statement

  2. SQL OUTPUT Opgeslagen procedures werken niet met ExecuteReader

  3. Partitiefunctie COUNT() OVER mogelijk met DISTINCT

  4. MAAND() Voorbeelden in SQL Server (T-SQL)