Mysql
 sql >> Base de données >  >> RDS >> Mysql

ORDER BY RAND() alternative

Si vous avez une colonne ID, il est préférable de faire un :

-- create a variable to hold the random number
SET @rownum := SELECT count(*) FROM table;
SET @row := (SELECT CEIL((rand() * @rownum));

-- use the random number to select on the id column
SELECT * from tablle WHERE id = @row;

La logique de sélection du numéro d'identification aléatoire peut être déplacée au niveau de l'application.

SELECT * FROM table ORDER BY RAND LIMIT 40

est très inefficace car MySQL traitera TOUS les enregistrements de la table en effectuant une analyse complète de la table sur toutes les lignes, en les classant au hasard.