Mysql
 sql >> Base de données >  >> RDS >> Mysql

Renvoie des résultats aléatoires (ordre par rand())

La raison pour laquelle la commande par RAND() peut être lent, c'est que vous forcez la base de données à trier toute la table avant de renvoyer quoi que ce soit. Le simple fait de réduire la charge à une seule analyse de table est beaucoup plus rapide (bien que toujours un peu lent).

Cela signifie que vous pourriez obtenir une partie du chemin simplement en évitant de commander :

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

Cela sélectionnera environ 1% de toutes les lignes du tableau, les triera et renverra les 100 premières. Notez simplement que le problème principal ici (ainsi qu'avec la réponse de @cmd) est que vous ne pouvez pas être sûr que la requête renvoie rien du tout.

L'approche ci-dessus devrait impliquer une analyse complète de la table (pour décider quelles lignes utiliser) suivie d'un tri d'environ 1 % des lignes. Si vous avez beaucoup de lignes, vous pouvez réduire le pourcentage en conséquence.