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

Devolver resultados aleatorios (ordenar por rand() )

La razón por la que ordenar por RAND() puede ser lento es que está obligando a la base de datos a ordenar toda la tabla antes de devolver algo. Simplemente reducir la carga a un solo escaneo de tabla es mucho más rápido (aunque todavía algo lento).

Esto significa que podría obtener parte del camino simplemente evitando el pedido:

  SELECT *
    FROM my_table
   WHERE RAND() < 0.1
ORDER BY RAND()
   LIMIT 100

Esto seleccionará aproximadamente el 1 % de todas las filas de la tabla, las ordenará y devolverá las 100 primeras. Solo tenga en cuenta que el problema principal aquí (al igual que con la respuesta de @cmd) es que no puede estar seguro de que la consulta devuelva cualquier cosa.

El enfoque anterior debe incluir un escaneo de toda la tabla (para decidir qué filas usar) seguido de aproximadamente el 1% de las filas. Si tiene muchas filas, puede reducir el porcentaje en consecuencia.