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.