martes, 18 de junio de 2013

Obteniendo resultados aleatorios

Después de varios meses ausente, recomenzamos con algo rápido, pero que en ocasiones puede ser de utilidad. Se trata del uso de una función de PostgreSQL que puede ser utilizada para obtener resultados aleatorios.

Supongamos que queremos mostrar 3 de los productos que tenemos en nuestra base de datos, pero que su elección sea totalmente aleatoria. Una solución muy sencilla de implementar en PostgreSQL es la siguiente:

SELECT * FROM productos ORDER BY random() LIMIT 3

Aunque esta consulta está bastante optimizada en PostgreSQL, la realidad es que para ejecutarla se requiere examinar o recorrer toda la tabla. Esto puede ser un problema para tablas con una enorme cantidad de registros, lo cual afectará el rendimiento de la aplicación que necesite utilizar este recurso.

Existen otras soluciones más eficientes, pero en su mayoría requieren la inclusión de nuevas columnas que son populadas utilizando valores aleatorios o secuenciales. Los incito a que creen sus propias soluciones  basadas en el uso de la función random(), que puedan mejorar la eficiencia de la solución propuestas para casos reales asociados a tablas con un número elevado de registros.