Uso de INSERT DELAYED en MySQL

En MySQL cuando se realiza un operación INSERT el gestor de bases de datos realiza la inserción del registro que se le haya indicado y además devuelve la id del registro si se está trabajando con una tabla que tiene un campo auto_increment. Esta operación, para mantener la consistencia y además poder ofrecer la última id, se queda en espera hasta que MySQL haya acabado de realizar la inserción.

mysql_query(“INSERT INTO usuarios (usuario,historial) VALUES (5,’Lorem ipsum….’)”);
// PHP espera. El resto del código no se ejecutará hasta que no termine la operación

En muchos casos esto es lo ideal, ya que se suele necesitar la id que devuelve la inserción o también es posible que después de ese insert sea necesario realizar más operaciones que dependan de ese INSERT.

Pero en otros casos no es necesario para seguir trabajando ni la id que devuelve la inserción ni los querys siguientes dependen del último INSERT, en esos casos lo que premia es la velocidad, lanzar la instrucción de inserción y seguir trabajando sin esperar a que finalice. Para eso se puede usar INSERT DELAYED, la instrucción es completamente igual que un INSERT tradicional pero añadiendo la palabra clave “DELAYED”. Por ejemplo:

mysql_query(“INSERT DELAYED INTO usuarios (usuario,historial) VALUES (5,’Lorem ipsum….’)”);
// PHP no espera. El código que haya a continuación se ejecuta sin esperar a que MySQL termine

Es muy útil si en un script o aplicación (sea PHP, Python, Ruby, C o cualquier otro) necesitas insertar cientos o miles de registros sin que se quede bloqueada la aplicación esperando la inserción de cada uno de los registros. Mediante INSERT DELAYED la aplicación manda la instrucción a MySQL y éste ya se encargará de insertar los registros en la base de datos en el mejor momento. También es muy útil en servidores con mucha carga, ya que de esta manera MySQL busca el mejor momento para realizar los inserts y no justo cuando se hace la petición.

NOTA: Sólo funciona en tablas MyISAM y MEMORY. No funciona en otros motores como por ejemplo InnoDB.

8 comments

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *