Avec la méthode rand :
- le script PHP créé une requête et la soumet au serveur MySQL
- le serveur MySQL effectue l'opération suivante :
Using where; Using index; Using temporary; Using filesort
- le résultat est préparé
- tu l'envoie au script PHP
- tu traite le tuple pour affichage
avec la méthode select id :
- tu envoie la requête
- le serveur MySQL prépare tous les résultats possible
- l'ensemble de résultats transite sur le réseau
- le script PHP stocke les résultats dans un tableau
- le script PHP lit l'id en fonction d'une position aléatoire
- le script PHP écrit une nouvelle requête SQL et l'envoie au serveur
- etc.
Je ne sais pas laquelle des deux méthodes est efficace, les deux me semblent inefficace, même si j'ai tendance à privilégier la solution avec le rand dans la requête SQL car l'ensemble de la manipulation des données est effectuée dans MySQL, ce qui est son rôle.
Maintenant, si la génération d'un nombre aléatoire pose vraiment problème, ce dont je doute, il serait toujours temps de trouver une astuce (avec une table aléatoire de référence par exemple).
J'ai pour principe de faire simple, et d'optimiser si nécessaire. L'optimisation précoce est un piège :)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.