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

MySQL sélectionne rapidement 10 lignes aléatoires parmi 600 000 lignes

Un excellent article traitant de plusieurs cas, du simple au non uniforme avec des lacunes.

http://jan.kneschke.de/projects/mysql/order- par-rand/

Pour la plupart des cas généraux, voici comment procéder :

SELECT name
  FROM random AS r1 JOIN
       (SELECT CEIL(RAND() *
                     (SELECT MAX(id)
                        FROM random)) AS id)
        AS r2
 WHERE r1.id >= r2.id
 ORDER BY r1.id ASC
 LIMIT 1

Cela suppose que la distribution des identifiants est égale et qu'il peut y avoir des lacunes dans la liste des identifiants. Voir l'article pour des exemples plus avancés