Bonjour,

je cherche à optimiser une procédure de sélection de N résultats aléatoires dans une table. Le but est d'obtenir N mots pour un nuage de mots intitulé "Mots et expressions au hasard" dans cet exemple : http://www.aquaportail.com/definitio...urs-d-eau.html

La table contient plus de 8000 mots (et fera 15 ou 20.000 enregistrements à terme) et je cherche à en extraire N mots d'une façon totalement aléatoire.

Actuellement, c'est une boucle qui fait N SELECT... et N vaut 12 (depuis peu, c'était à 15 il y a encore 10 jours!). Souhaitant optimiser cette partie, j'ai trouvé quelques informations sur RAND et il serait envisageable d'obtenir mes N mots en faisant quelque chose du style
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"SELECT id, mot FROM ... ORDER BY RAND() LIMIT 12" (ou N).
Mais les quelques lectures s'accordent toutes sur une conclusion : ORDER BY RAND est une requête lente... Remplacer une boucle rapide par une requête lente, je ne suis pas certain d'y gagner.

Quelle serait la solution idéale dans mon cas? Je précise qu'il y a un index sur "id" mais pas sur "mot" (d'ailleurs, je me demande si ce ne serait pas intéressant d'en créer un sur ce champ constamment utilisé???).