Consulta lenta
#1
Escrito 29 abril 2010 - 06:43
En un sistema de gestion comercial, tengo el caso de consultar el saldo total de todos los proveedores. El sistema consulta por cada proveedor su cuenta corriente y muestra los totales del saldo anterior, compras, pagos y saldo actual entre dos fechas.
Esta consulta demora demasiado y esta dentro de un ciclo que recorre a todos los proveedores:
select * from compras where codigo="codprov" order by fecha
Ya he creado los indices necesarios, pero no encuentro la solución para bajar el tiempo de respuesta.
Desde ya muchas gracias
#2
Escrito 29 abril 2010 - 08:17
los indices estan hechos sobre los campos codigo y fecha?
El motor a esto lo interpreta como algo secuancial al que despues de filtrar los codigos, los ordena. Por esa razon si tenes 100 registros tarda 1 seg, si tenes 10000 seguro tarda 1min.
Deberias asignar un filtro mas para achicar el resultado por ejemplo a los que tengan saldo > 0
#3
Escrito 29 abril 2010 - 08:25
Uso el MySQL 4.1 y tengo creado un indice por los campos codigo y fecha.
Pero no puedo bajar el tiempo de respuesta
#4
Escrito 29 abril 2010 - 09:06
Gracias por tu respuesta.
Uso el MySQL 4.1 y tengo creado un indice por los campos codigo y fecha.
Pero no puedo bajar el tiempo de respuesta
Podrías compartir la consulta amigo?. es probable que logremos optimizarla
#5
Escrito 29 abril 2010 - 09:09
SELECT * FROM compras WHERE codigo="codprov" ORDER BY fecha
¿ Es necesario recuperar todos los campos ?
Salud OS
#6
Escrito 29 abril 2010 - 09:45
Para ver el saldo actual de cada proveedor tengo que recorrer todos sus movimientos.
Gracias por responder
#7
Escrito 29 abril 2010 - 09:48
select * from compras where codigo="codprov" order by fecha
El campo codigo debe ser declarado como char, ya que optimiza al ser convertido en índice optimiza las búsquedas en él. Amén de fecha también debe ser indexado.
Saludos.
#8
Escrito 29 abril 2010 - 10:41
Gracias por tu respuesta.
Uso el MySQL 4.1 y tengo creado un indice por los campos codigo y fecha.
Pero no puedo bajar el tiempo de respuesta
¿ Te refieres a que has creado un índice para el campo código y otro para el campo fecha, o a que has creado un índice compuesto para código + fecha ?.
Puesto que para acelerar correctamente esa consulta necesitas el segundo caso, el del índice compuesto.
NOTA: como dice egostar, para calcular el saldo actual de cada proveedor no necesitas recuperar todos sus campos, te bastaría con una consulta del estilo :
select importe_total from compras where codigo="codprov" order by fecha
Saludos.
#9
Escrito 30 abril 2010 - 04:26
#10
Escrito 01 mayo 2010 - 05:34
Una vez mas gracias marc
Me imagino que este tema resuelto ¿no?, si es así por confirmar para asiganrlo como [RESUELTO].
Saludos.