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

Returner tilfældige resultater (rækkefølge efter rand() )

Grunden til, at bestilling efter RAND() kan være langsom er, at du tvinger databasen til faktisk at sortere hele tabellen, før du returnerer noget. Bare at reducere belastningen til en enkelt tabelscanning er meget hurtigere (omend stadig noget langsom).

Det betyder, at du kan komme en del af vejen blot ved at undgå bestillingen:

  SELECT *
    FROM my_table
   WHERE RAND() < 0.1
ORDER BY RAND()
   LIMIT 100

Dette vil vælge cirka 1 % af alle rækkerne i tabellen, sortere dem og returnere top 100. Bemærk blot, at hovedproblemet her (såvel som med @cmds svar) er, at du ikke kan være sikker på, at forespørgslen returnerer overhovedet noget.

Fremgangsmåden ovenfor bør involvere en hel tabelscanning (for at beslutte, hvilke rækker der skal bruges) efterfulgt af en slags cirka 1 % af rækkerne. Hvis du har mange rækker, kan du reducere procentdelen tilsvarende.



  1. Hvorfor mislykkes oprettelsen af ​​Foreign Key i Laravel 5.8?

  2. LINQ to Entities genkender ikke metoden 'System.String ToString()'-metoden, og denne metode kan ikke oversættes til et butiksudtryk

  3. afstandsberegninger i mysql-forespørgsler

  4. Advarsel:mysql_fetch_array() forventer, at parameter 1 er ressource, boolesk givet i