Requête select et random en SQL - MySQL

Publié le 13 août 2009 par Petitchevalroux

Pour faire une sélection aléatoire dans mysql on peut combiner la fonction rand() et la clause order by.

Sélection aléatoire d'une ligne

La requête sql suivante sélectionne une ligne au hasard dans la table MA_TABLE :

SELECT *
FROM MA_TABLE
ORDER BY RAND( )
LIMIT 1

Performances

La requête précédente est certes bien pratique mais je dois vous avertir qu'elle n'est pas du tout optimisée comme le montre la requête explain suivante :

EXPLAIN SELECT CON_ID
FROM CONTENTS
ORDER BY RAND( )
LIMIT 1;
Extra : Using index; Using temporary; Using filesort

On obtient le duo gagnant qui indique une requête SQL non optimisée : Using temporary; Using filesort, vous êtes prévenu.