Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Mysql se cuelga y no realiza la operacion

Estas en el tema de Mysql se cuelga y no realiza la operacion en el foro de Mysql en Foros del Web. Estimados, estoy tratando de eliminar varios registros a mediante delete desde un programa PHP mi duda aca es que conviene mas, ejecutar las instrucciones por ...
  #1 (permalink)  
Antiguo 27/08/2008, 16:01
 
Fecha de Ingreso: abril-2001
Mensajes: 293
Antigüedad: 22 años, 11 meses
Puntos: 0
Mysql se cuelga y no realiza la operacion

Estimados, estoy tratando de eliminar varios registros a mediante delete desde un programa PHP

mi duda aca es que conviene mas, ejecutar las instrucciones por separado? o solo una instruccion con todos los id a eliminar?

por ejemplo:

delete from tabla where id=1;
delete from tabla where id=2;
delete from tabla where id=3;
..
..
..
delete from tabla where id=n;


o

delete from tabla where id=1 or id=2 or id=3 .... or id=n;


y lo mismo al momento de insertar

Insert into tabla (id) Values (1);
Insert into tabla (id) Values (2);
Insert into tabla (id) Values (3);
..
..
..
Insert into tabla (id) Values (n);

o

Insert into tabla (id) Values (1),(2),(3),....(n);



Estos ejecutando las instrucciones de una en una y la tabla es de tipo Innodb, por ende realizo transacciones, mi duda es cual de las dos conviene usar??


saludos y suerte!!!
  #2 (permalink)  
Antiguo 27/08/2008, 19:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Mysql se cuelga y no realiza la operacion

Es muchísimo más simple hacer un borrado múltiple e inserciones múltiples, que simples. Eso es evidente, ya que la base realiza la operación sobre toda la tabla en tiempo de proceso, mientras que con sentencias por separado pierdes tiempo creando y usando la comunciación hacia la base (incluso usando conexiones permanentes), ya que a cada sentencia corresponde una respuesta, y eso implica tiempo de enlace... quees muchísimo más lento que el de procesamiento.
De hecho, ambas cosas están entre las reglas generales de optimización de consultas de todos los manuales y libros sobre ese tema.

Una operación del tipo:
Código:
DELETE FROM tabla1 WHERE ID IN(1,2,3,4,5,6,7,8,9,10,22,325,555);
Es mucho más rápida incluso que hacer un loop en un store procedure para que haga lo mismo usando contadores como variable de entrada de ID.

Igualmente eso:
Código:
UPDATE tabla1 SET campo1 = '123' WHERE ID IN(1,2,3,4,5,6,7,8,9,10,22,325,555);
En el caso de los inserts, la solución consiste en encadenar conjuntos de VALUES de esta forma:

Código:
INSERT INTO tabla1(ID) VALUES(1), (2), (3), (4), (5), (6), (7), (8), (9);
Este string, obviamente, debe ser construido en la aplicación y no es sencillo de obtener en un SP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/08/2008, 07:46
 
Fecha de Ingreso: abril-2001
Mensajes: 293
Antigüedad: 22 años, 11 meses
Puntos: 0
Respuesta: Mysql se cuelga y no realiza la operacion

Ok, Muchas Gracias por tu respuesta lo pondre en practica.


saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:06.