A muchos programadores de PHP les debe sonar la función mysql_unbuffered_query(), que por el nombre se deduce que es como la función mysql_query() pero sin pasar por el buffer, no? Un razonamiento rápido y obvio. Pero hay que definir mejor que es lo que realiza y como lo realiza, y cuales son sus ventajas y desventajas para poder decidir cuando utilizar una o otra función.
mysql_unbuffered_query() realiza una peticion SQL a MySQL, que puede ser un SELECT, UPDATE, SHOW, EXPLAIN, DELETE, … Las filas que devuelve la petición no son almacenadas en un búfer como lo ha hace mysql_query().
Las ventajas que ofrece son:
- Ahorrar en recursos del sistema, porque cuando la cantidad de datos devuelta por la petición es considerable, esta no es almacenada en memoria.
- Poder empezar a tratar las primeras filas del resultado que es devuelta por MySQL, sin esperar a que MySQL acabe la ejecución de la petición y sean devueltas todas las filas.
Las desventajas de mysql_unbuffered_query() son:
- No se pueden utilizar las siguientes funciones:
- mysql_num_rows(): obviamente, si MySQL aún no ha acabado la petición, no podemos saber el número de filas que va a retornar cuando acabe.
- mysql_data_seek(): al no tener todas las filas del resultado, no esta permitido mover el puntero interno libremente a la fila que se quiera.
- No se puede realizar otra petición SQL a la base de datos hasta que la petición no haya finalizado, y haya retornado todas las filas del resultado. Por lo tanto, si las operaciones que se van a hacer sobre las filas tienen peticiones SQL, tendrán que esperar a que finalice la petición de la base de datos. Un ejemplo didáctico sería, que si nuestro script hace un SELECT a la base de datos, y por cada registro queremos hacer un UPDATE, hasta que el SELECT no devuelva todos los registros, no se podrá hacer ningún UPDATE o otra petición.
En resumen, esta función puede optimizar nuestra aplicación en los casos que se hacen peticiones que ocupan mucho espacio, o peticiones en que nos urge empezar a trabajar con las filas y no son operaciones que realizan más peticiones a la base de datos.
entendido. :)