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

¿Buena idea/mala idea? ¿Usando MySQL RAND() fuera de un pequeño conjunto de resultados de subconsulta?

En realidad... terminé haciendo una prueba y podría haber respondido mi propia pregunta. Pensé en publicar esta información aquí en caso de que fuera útil para alguien más. (Si he hecho algo malo aquí, ¡házmelo saber!)

Esto es algo sorprendente...

Al contrario de todo lo que he leído, creé una tabla llamada TestData con 1 millón de filas y ejecuté la siguiente consulta:

SELECCIONE * DESDE TestData DONDE número =41 ORDENAR POR ALEATORIO() LÍMITE 8

...y devolvió las filas en un promedio de 0.0070 segundos. Realmente no veo por qué RAND() tiene tan mala reputación. Me parece bastante útil, al menos en esta situación particular.

Tengo tres columnas en mi tabla:

identificación [BIGINT(20)] | campo de texto [texto pequeño] | número [BIGINT(20)]

Clave principal en id, índice en número.

Supongo que MySQL es lo suficientemente inteligente como para saber que solo debería aplicar RAND() a las 20 filas que devuelve "WHERE number =41" . (Específicamente agregué solo 20 filas que tenían el valor 41 para 'número').

El método de subconsulta alternativo devuelve resultados con un tiempo promedio de alrededor de 0,0080 segundos, que es más lento que el método sin subconsulta.

Método de subconsulta:SELECCIONAR * DESDE (SELECCIONAR * DESDE TestData DONDE número =41) como t ORDER BY RAND() LIMIT 8