El problema no es el código de su aplicación o su lenguaje de implementación.
Si va a buscar un millón de grabaciones en el código de su aplicación, la recodificación en C mejorará un poco el rendimiento, pero seguirá siendo un asco y no escalará.
Es mejor hacer la “selección aleatoria” en su base de datos. Sin embargo, incluso allí hay que tener un poco de cuidado. Si utiliza el método “habitual”:
- ¿Se puede vincular desde un sitio web receptivo a una aplicación?
- ¿Qué debo elegir, desarrollo de juegos o desarrollo web?
- ¿DigitalOcean es solo para desarrolladores? ¿Y es la mejor opción proporcionar servicios de alojamiento web / almacenamiento a mis clientes a nivel empresarial?
- ¿Qué otros protocolos existen para comunicarse por Internet? ¿Hay alguno no asociado con WWW?
- Cómo construir mi propio sitio de transmisión de videos de suscripción tipo Netflix
SELECT * FROM MYTAB ORDER BY RAND() LIMIT 1;
harás un escaneo completo de la tabla y una ordenación activa en MYTAB, lo cual es muy malo.
Una mejor manera es algo como lo siguiente:
- En el código de la aplicación, o en un procedimiento almacenado, genere una CLAVE PRIMARIA correctamente formateada con un valor aleatorio, posiblemente utilizando algunas matemáticas con RAND () y MIN / MAX en la CLAVE PRIMARIA de su tabla.
SELECT MIN(PK), MAX(PK) from MYTAB;
Es una consulta rápida. - Una vez que tenga su CLAVE PRIMARIA aleatoria, úsela para seleccionar un registro.
- Si generó un PK que no existe, repita hasta obtener uno. Si no hace muchos DELETEs, o sus DELETEs siempre son del registro más antiguo, esto no debería ser un gran problema.
- Una vez que tenga un registro, envíelo a la aplicación.
La lógica específica para generar un PK y registro aleatorio válido dependerá de la lógica de su negocio, pero lo anterior es un “algoritmo” generalmente decente para hacerlo.