Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/12/2009, 01:08
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Se puede optimizar el UPDATE?

Buenas,

Tengo un script que leer un fichero XML grandecito más de 1.000 registros (aunque este xml puede aumentar a más de 20.000 registros sin problemas, pero estoy viendo que leyendo 1.000 registros ya va lento... ) e introducir los datos en una bbdd mysql para su posterior información.

Después de poner contadores de tiempo en el script, he conseguido hallar la operación que hace que se demore tanto! el UPDATE!!

Hay 2 escenarios:

Si los datos del fichero xml no estan en la base de datos:
  • Carga el fichero XML en un array que es procesado posteriormente de 2 a 3 seg.
  • Compara cada linea del fichero xml si está introducida en la bbdd (y como en este escenario no están, los introduce INSERTs) entre 3 y 4 seg.

Si los datos del fichero XML ya están en la base de datos pero han cambiado el xml:
  • Carga el fichero XML en un array que es procesado posteriormente de 2 a 3 seg.
  • Compara cada linea del fichero xml si está introducida en la bbdd. En este caso ya están en la base de datos, por lo que tengo que hacer un UPDATE por cada registro del XML con la BBDD. Este es el punto conflictivo, los UPDATES, al parecer no tarda lo mismo un INSERT que un UPDATE, tardando este último 10 veces más! mas de 10 seg. tarda en hacer los 1.000 updates.

Me pregunto si esto es normal y si se puede optimizar de alguna manera, que no tarde tanto actualizar todos los registros de la bbdd que coinciden con los registros del XML que estoy leyendo...

La consulta del update:
Código SQL:
Ver original
  1. $sql_actualiza="UPDATE xml_tabla SET precio='$precio' where idproducto='$IDproducto'";  $actualizada=@mysql_db_query($sql_db,$sql_actualiza_cuota,$db_conexion) OR die(mysql_error())
;

Muchas gracias de antemano!