Ir al contenido


Foto

query lento


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

#1 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 13 septiembre 2011 - 02:46

Saludos

Tengo inconvenientes con un query, al hacer la consulta el sistema se pone lento conmo puedo solucionarlo????, la setencia me sirve para lo que quiero pero al cargar datos se nota mucho la demora la hacer la consulta  :sad:


este es el codigo



delphi
  1. //codigo en el form
  2. DmTodo.q_perinatal.Close;
  3.         DmTodo.q_perinatal.ParamByName('factura').AsString:=Item.SubItems[2];
  4.         dmtodo.q_perinatal.Open;
  5.         if Not DmTodo.q_perinatal.IsEmpty then
  6.                 lstTurnos.Canvas.Font.Color :=clred;


En un dm esta el  q_perinatal que tiene este codigo
SELECT
HISTORIA.ID
FROM
HISTORIA
WHERE
HISTORIA.nro_fac=:factura
AND HISTORIA.CONSULTA_CERRADA = 'T'

  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 13 septiembre 2011 - 03:03

SELECT
HISTORIA.ID
FROM
HISTORIA
WHERE
HISTORIA.nro_fac=:factura
AND HISTORIA.CONSULTA_CERRADA = 'T'


Verifica que los campos nro_fac y consulta_cerrada esten indexados. y si no lo están, deberás crear los índices para ambos campos
  • 0

#3 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 13 septiembre 2011 - 03:12

Te mando una imagen con los datos que estan creados en los indices y la imagen de los campos de la tabla

Archivos adjuntos


  • 0

#4 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 14 septiembre 2011 - 06:15

Saludos.

Puedes probar a realizar dicha consulta en el mismo SQL Manager y verificar el plan que esta implementado el gestor de la BD. Así puedes determinar cual es el indice que utiliza también como los posibles indices faltantes.
  • 0

#5 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 14 septiembre 2011 - 07:18

al hacer la consulta en el sql manager busca normalmente sin demoras,  no te entiendo la parte de verificar el plan que esta implementado el gestor de la BD ¿como hago eso o como lo verifico???? disculpa mi ignorancia pero soy nuevo en esto
  • 0

#6 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 14 septiembre 2011 - 07:28

Pues, según veo en tus imágenes. Tanto el campo nro_fac y el campo CONSULTA_CERRADA no están indexados.
  • 0

#7 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 14 septiembre 2011 - 08:00

Al ingresarlos sigue igual.
:sad:

Archivos adjuntos


  • 0

#8 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 14 septiembre 2011 - 08:53

Al ingresarlos sigue igual.


Que raro, una pregunta, cuántos registros tiene tu tabla de historia?
  • 0

#9 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 14 septiembre 2011 - 09:18

Al ingresarlos sigue igual.


No puede ser que con indices sea igual de lento con sin ellos, no es posible, deberia haber cambiado de lento a inmediato. SI era de esperar que fuese lentisimo antes, pro no despues.

Asegurate de que has hecho el cambio realmente en la misma base de datos que usas al probar la aplicacion, otra cosa no se me ocurre para explicarlo.

Otra opcion: Añade el campo a tu tabla incial que te diga si el color ha de ser rojo modificando tu sql "principal" para que te de el dato como un campo más:

Antes:

select f.* from factura f


Ahora:

select f.*, (select count(1) from historia h where h.nro_fac=f.nro_fac and h.CONSULTA_CERRADA='T') en_rojo
from factura


Ahora solo has de comprobar que el campo "en_rojo" sea >0 para decidir si pones o no en rojo el label.

Con eso evitas abrir y cerrar una consulta, y podria hacer mas sencillo y rapido el proceso.

Aun así, si esos indices no estan ayudando por alguna razón, seguirá siendo lento.

Ah! El plan suele venir como una propiedad de los componentes que usas para conectar, siempre que sean especificos de firebird.

Yo uso FlameRobin para lanzar estas consultas, te da el "plan" en una pestaña, y la idea es que te da la lista de indices que va a usar: si te aparece la palabra NATURAL es que la consulta va a tardar mucho y necesitas un nuevo indice.

Eso si, asegurate mucho de estar siempre hablando de la misma base de datos, no vaya a ser que los indices esten en una y el programa utilice otra!
  • 0

#10 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 14 septiembre 2011 - 09:34

Hola.

Si en SQL Manager se hace la consulta sin demoras, y en cambio desde Delphi tarda mucho, es que en Delphi probablemente estás ejecutando más código.

Asegúrate de que no tengas algún evento AfterOpen que ejecute código adicional tras abrir la consulta (también puede estar en un evento AfterScroll, etc. ....).

Ese código adicional es el que en realidad se ejecuta lento y necesita optimizarse.

Saludos.
  • 0

#11 FELIX

FELIX

    Advanced Member

  • Miembros
  • PipPipPip
  • 123 mensajes

Escrito 14 septiembre 2011 - 11:00

Gracias foro por las respuestas oportunas
en la base hay registrados 12435 personas.

Con el codigo que me dio Sergio la consulta se hace mucho mas rapida, solo se nota unos saltos cuando esta actualizando. Mejoro muchisimo.

Gracias a todos los que respondieron mi pregunta. (y)

  • 0




IP.Board spam blocked by CleanTalk.