J'ai juste lancé une simple SELECT * FROM table ORDER BY RAND() LIMIT 50;
sur une table comportant 229 291 lignes. Terminé en 0,63 secondes. Étant donné, que RAND() est vraiment lent et qu'il devrait y avoir une meilleure solution.
Je ne connais qu'un seul autre moyen de sélectionner une ligne aléatoire dans un grand ensemble de données, plus rapide que l'utilisation de la fonction ORDER BY RAND()
. qui est expliqué ici : http://wanderr.com/jay/order-by-slow/2008/01/30/
Pour les rangées aléatoires multiples, je ne connais pas actuellement de meilleure solution. Si les identifiants sont successifs et qu'aucun identifiant ne manque entre eux, vous pouvez générer une liste de nombres aléatoires séparés par des virgules dans votre propre code PHP - et ensuite, en utilisant la fonction SELECT * FROM table WHERE id IN(5,3,1);
requête.
Voici une solution qui fonctionne, dans une autre question de Stack Overflow : Comment puis-je optimiser la fonction ORDER BY RAND() de MySQL ?
Cela a fonctionné pour moi, 50 lignes dans le jeu (0,09 sec) pour la table avec 229 291 enregistrements.