Beta, como Goooogle
16 Dic
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.
4 Responses for "Uso de INSERT DELAYED en MySQL"
muy interesante, no tenía ni idea.
me va bien para un contador de visitas por ejemplo.
uis me da error de sintaxis…require alguna verison especial de mysql?
Tambien comentar que esta mal en el codigo de ejemplo escribes DALAYED en vez de DELAYED
ok, encontrado sólo funciona con mysam http://dev.mysql.com/doc/refman/5.0/es/insert-delayed.html
Gracias por avisar, ya lo he corregido.
Pues no sabía que solamente funcionaba en MyISAM. Mirando información en la página de MySQL, dicen que en InnoDB, al ser un motor transaccional, no tiene sentido implementar este comportamiento.
Aquí lo comentan http://bugs.mysql.com/bug.php?id=5777
[...] http://www.pcfrikis.com/2009/12/16/uso-de-insert-delayed-en-mysql/ AKPC_IDS += "2998,"; [...]
Leave a reply