Ir al contenido


Foto

Consulta lenta


  • Por favor identifícate para responder
9 respuestas en este tema

#1 golf2009

golf2009

    Advanced Member

  • Miembros
  • PipPipPip
  • 99 mensajes

Escrito 29 abril 2010 - 06:43

Hola a todos:
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





  • 0

#2 maxid

maxid

    Member

  • Miembros
  • PipPip
  • 14 mensajes
  • LocationCordoba

Escrito 29 abril 2010 - 08:17

que motor usas?
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

  • 0

#3 golf2009

golf2009

    Advanced Member

  • Miembros
  • PipPipPip
  • 99 mensajes

Escrito 29 abril 2010 - 08:25

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

  • 0

#4 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

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 :D
  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 29 abril 2010 - 09:09

Yo creo que el asunto va por este lado



sql
  1. SELECT * FROM compras WHERE codigo="codprov" ORDER BY fecha



¿ Es necesario recuperar todos los campos ?

Salud OS
  • 0

#6 golf2009

golf2009

    Advanced Member

  • Miembros
  • PipPipPip
  • 99 mensajes

Escrito 29 abril 2010 - 09:45

Egostar:

Para ver el saldo actual de cada proveedor tengo que recorrer todos sus movimientos.

Gracias por responder
  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 29 abril 2010 - 09:48

No había visto que colocaste la consulta juas :p sorry.

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.
  • 0

#8 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

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.
  • 0

#9 golf2009

golf2009

    Advanced Member

  • Miembros
  • PipPipPip
  • 99 mensajes

Escrito 30 abril 2010 - 04:26

Una vez mas gracias marc
  • 0

#10 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

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.
  • 0




IP.Board spam blocked by CleanTalk.