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

AYUDA necesito hacer 5000 querys en un proceso, es viable?

Estas en el tema de AYUDA necesito hacer 5000 querys en un proceso, es viable? en el foro de Bases de Datos General en Foros del Web. Hola amigos foreros. Bueno les cuento... Estoy haciendo una aplicacion en php y mysql o sql server , puede ser en cualquiera de las 2; ...
  #1 (permalink)  
Antiguo 19/07/2010, 20:52
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 16 años, 3 meses
Puntos: 0
Exclamación AYUDA necesito hacer 5000 querys en un proceso, es viable?

Hola amigos foreros.

Bueno les cuento... Estoy haciendo una aplicacion en php y mysql o sql server, puede ser en cualquiera de las 2; la cuestion es que tengo que cargar un archivo de EXCEL con 1500 registros, e ir tomando unos datos de cada registro de la hoja de excel y consultandolos en la base de datos, luego es posible que tenga que hacer unos INSERT y/o UPDATE; por lo que en promedio tendria que hacer 3 querys (SELECT, INSERT Y UPDATE) por cada uno de los 1500 registros que tiene la hoja de excel, OSEA ALGO COMO QUE 5000 QUERYS; mi preocupacion es que si el php o la base de datos se saturen de tantos querys, claro hay que saber que los querys son sencillos, porque los SELECT solo retornaran uno o algunos pocos registros para verificarlos y luego pasar al INSERT y UPDATE.

En resumidas cuentas es como que los 1500 registros que tiene el archivo de EXCEL son clientes y tengo que verificar si existen en el sistema, y luego agregarle una informacion, o crearlos y cargarle tambien una informacion. Por lo que obligatoriamente tengo que recorrer los 1500 registros y hacer varios querys para cada uno de ellos...

QUE ME RECOMIENDAN???
  #2 (permalink)  
Antiguo 19/07/2010, 21:46
Avatar de 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
Puntos: 2658
Respuesta: AYUDA necesito hacer 5000 querys en un proceso, es viable?

No hay una única solución y plantear una sin conocer cómo son las tablas implicadas, qué datos hay en ellas, y qué determina la inserción o la actualización, es hablar francamente en el aire.
Aún así, yo me plantearía:
1) Crear una tabla temporal donde volcar en un sólo paso el contenido completo de la tabla de Excel, posiblemente usando un archivo .CSV.
2) Analizar cómo crear una consulta que me devuelva la totalidad de los registros que sólo se deben insertar.
3) Analizar cómo crear una consulta que sólo deba actualizar la tabla destino.

Esto, que parece simplista, es bastante sencillo y podría realizarse (dependiendo de qué es lo que hay que recuperar de la tabla Excel) con algunas consultas bien elaboradas.
__________________
¿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 19/07/2010, 22:10
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 16 años, 3 meses
Puntos: 0
Exclamación Respuesta: AYUDA necesito hacer 5000 querys en un proceso, es viable?

Hola amigo gnzsoloyo, gracias por la respuesta.

Pues lo de la tabla temporal ya me lo he pensado y asi es que pienso hacerlo, no lo resalte en el`planteamiento del problema porque me parecio secundario, de todas maneras gracias por el tips.

La cuestion de como se determina la insercion o actualizacion, se hace a traves de la consulta de 2 tablas y se evalua con unas condiciones en el php, algo como consultar a la tabla clientes para verificar si el cliente existe y la otra si el cliente posee la descripcion, si posee actualizarla, sino posee insertarla, de ahi el problema que veo, que como la consulta de esa informacion es tan especifica, tendria que ir de uno en uno para cada uno de los 1500 clientes.

O EXISTE ALGUNA MANERA DE CONSULTAR TODO EN UN SOLO QUERY? SEGUN CREO NO SE PODRIA, PORQUE TENGO QUE IR CONSULTANDO POR CADA CLIENTE. ¿QUE DICES TU AMIGO?
  #4 (permalink)  
Antiguo 19/07/2010, 22:32
Avatar de 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
Puntos: 2658
Respuesta: AYUDA necesito hacer 5000 querys en un proceso, es viable?

Cita:
tendria que ir de uno en uno para cada uno de los 1500 clientes.
No necesariamente, sino generar una consulta que realice esa comparación en forma masiva.
El problema es saber qué se compara con qué...
Supongamos dos tablas de clientes (la primaria y la temporal); ambas deben contener el o los campos que conformen la PK y además deberían tener el campo descripción en NULL o vacío. En ese caso, podría hacer simplemente:

Código MySQL:
Ver original
  1. UPDATE cliente C INNER JOIN clientetemporal T ON C.cliente_id = T.cliente_id
  2. SET C.descripcion = T.descripcion
  3. WHERE C.descripcion IS NULL OR C.descripcion = '';

Por su lado, insertar l oque no existe necesitaría dos consultas: Una para determinar y cargar en una tabla lo que no exista, y otra para volcarlo masivamente. Algo así:
Código MySQL:
Ver original
  1. CREATE TABLE tempcliente
  2. SELECT T.*
  3. FROM clientetemporal T LEFT JOIN cliente C ON T.cliente_id = C.cliente_id
  4. WHERE C.cliente_id IS NULL;
  5.  
  6. INSERT INTO cliente
  7. FROM tempcliente;
Lo único que hay que considerar es que esta última operación se puede hacer con * si y sólo si la tabla cliente y tempcliente tienen las mismas columnas y en el mismo orden; en caso contrario deberá indicarse qué campos se ingresar y de qué campos se toman..

Estas consultas, planeadas de esta forma, se ejecutan masivamente y no requieren una iteración de lecturas y consultas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 20/07/2010, 06:53
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 16 años, 3 meses
Puntos: 0
Exclamación Respuesta: AYUDA necesito hacer 5000 querys en un proceso, es viable?

ok amigo gnzsoloyo, muy buena tu propuesta.

Ahora vamos a agregarle una descripcion mas al problema para que se asemeje mas a la realidad de lo que necesito:

TABLAS DE LA BD:

CLIENTES
id_cliente
nombre

DEPOSITOS
id_deposito
id_cliente
fecha
monto
id_cuotas_cancelas

CUOTAS
id_cuota
id_cliente
monto
status

DIFERENCIALES
id_diferencial
id_cliente
monto
fecha
id_deposito

En lo que te habia comentado de actualizar o insertar la descripcion en realidad son depositos que hacen los clientes, es decir, que la tabla temporal tendra 1500 depositos, donde cada registro de la tabla temporal tendra el id del cliente, el monto depositado y la fecha; entonces se debe verificar cuantas cuotas debe cada cliente, y si el cliente deposito 300$, y debe 2 cuotas que suman 290$, debe ir actualizando esas cuotas con status de pago y el diferencial de $ que quede cargarlo a otra tabla con el id del cliente para que pueda usarlo en un futuro. Adicionalmente existe otra tabla de depositos donde se carga toda la info del deposito del cliente y tambien guarda los id de los registros de las cuotas que se cancelaron con ese deposito.

IMPORTANTE: El sistema ya tiene generadas las cuotas que debe cada cliente.

RESUMEN: De cada deposito el sistema verificara si el cliente debe cuotas, si las debe, tendra que ponerlas como paga e ir descontando ese monto de la cuota al monto global del deposito, en caso de que sobre dinero lo cargara en otra tabla de diferencial.

Etiquetas: mysql, php, query, sql-server
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 02:03.