Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/02/2016, 11:59
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Optimización de Query

Paramos de un detalle: REPLACE lo que hace es reemplazar un registro con otro, o insertarlo si no existe. Pero el reemplazo es directo, mandatorio, univoco y total. Si no se envían todos los datos, los restantes se vaciarán o nulificarán.
Esta es una práctica muy mala si tienes que hacer validaciones, no es conveniente y está desaconsejada como práctica.
Si lo que necesitas es hacer una inserción si y sólo si el un dato clave no existe previamente, lo que te conviene es usar stored procedures y NUNCA usar REPLACE.
Por otro lado, si los datos restantes pueden ya existir, y no los vas a actual tampoco debes usar REPLACE, sino INSERT IGNORE...

Por un lado, entendamos que NUNCA se deben enviar a insertar o actualizar datos sin previamente haberlos validado. La base no tiene por qué perder el tiempo haciendo validaciones que debiste hacer antes. Es un desperdicio de recursos no solo de base, sino de red, ya que estás haciendo ejecutar procesos inútiles al sistema.

En otras palabras:
1) Si son altas puntuales, manuales (en el sentido que se envían una a una por ,formulario), debes validar ANTES de enviarlas.
2) Si son altas masivas, se deberían procesar por script prevalidado. Es decir que los datos tendrían que haber sido prevalidados y cargados en una tabla transaccional, luego de lo cual se puede usar un SP para que lo haga masivamente.
3) SI el insert masivo es secuencial, en un script de PHP, es conveniente que se envíe a ejecutar por SP, para que encapsule todo el ciclo de validación, inserción o rechazo de cada registro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)