sql >> Databasteknik >  >> RDS >> Mysql

Varför returnerar MySQL samma resultat när RAND() används i SELECT-satsen?

Rand()-frö

MySQL använder systemklockan för att skapa RAND() när det inte finns något andra värde. Frövärdet är i mikrosekunder, och jag kan inte återskapa problemet med RAND() producerar samma värde två gånger som du beskriver.

Om du öppnar MySQL Workbench och kör två satser samtidigt. Utdata är olika för varje.

SELECT RAND();
SELECT RAND();

När du öppnar flera flikar och får samma resultat. Det är troligtvis ett cachningsproblem, men du anger att du stämplar URL:en för att förhindra cachning. Så aktivera SQL-loggning på servern och verifiera att nya frågor anropas.

Rand() prestanda

ORDER BY RAND() är långsam eftersom det kräver MySQL för att läsa hela tabellen. Även ORDER BY RAND() LIMIT 1 kräver fortfarande MySQL för att läsa hela tabellen.

UPPDATERING:

Du kan se vad det slumpmässiga värdet är som SQL genererar.

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

Det kommer att inkludera kolumnen X för varje rad. Det slumpmässiga värdet som används för att beställa frågan. Lägg till detta i utgången och se om varje webbläsare är verkligt returnerar samma resultatuppsättningar från MySQL.



  1. Hur delar man en sträng i PL/SQL?

  2. Hur man undviker variabelsubstitution i Oracle SQL Developer med "trinidad &tobago"

  3. Kan %NOTFOUND returnera null efter en hämtning?

  4. hur man beräknar saldon i ett bokföringsprogram med postgres fönsterfunktion