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

Restituisce risultati casuali ( order by rand() )

Il motivo per cui si ordina con RAND() può essere lento è che stai forzando il database a ordinare effettivamente l'intera tabella prima di restituire qualsiasi cosa. Ridurre il carico a una singola scansione della tabella è molto più veloce (sebbene ancora un po' lento).

Ciò significa che potresti ottenere parte del percorso semplicemente evitando l'ordinazione:

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

Questo selezionerà circa l'1% di tutte le righe nella tabella, le ordinerà e restituirà le prime 100. Tieni presente che il problema principale qui (così come con la risposta di @cmd) è che non puoi essere sicuro che la query restituisca qualsiasi cosa.

L'approccio sopra dovrebbe comportare una scansione dell'intera tabella (per decidere quali righe utilizzare) seguita da una sorta di circa l'1% delle righe. Se hai molte righe, puoi ridurre la percentuale di conseguenza.