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 styleMais 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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part "SELECT id, mot FROM ... ORDER BY RAND() LIMIT 12" (ou N).
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é???).
Partager