sql >> Base de Datos >  >> RDS >> Mysql

ORDEN POR ALEATORIO() alternativa

Si tiene una columna de ID, es mejor hacer 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 lógica de seleccionar el número de identificación aleatorio se puede mover al nivel de la aplicación.

SELECT * FROM table ORDER BY RAND LIMIT 40

es muy ineficiente porque MySQL procesará TODOS los registros en la tabla realizando un escaneo completo de la tabla en todas las filas, ordenándolas al azar.