Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Consulta sql lenta en Firebird (https://www.clubdelphi.com/foros/showthread.php?t=78608)

DamianG 03-05-2012 20:02:27

Consulta sql lenta en Firebird
 
Hola, tengo la siguiente consulta que ejecuto en un form donde tengo un campo edit, alli se ingresa la descripcion de un articulo y se va ejecutando al pulsar Enter, o segun yo lo defina al pulsar cada tecla, el tema es que monitoreando la base me dice que el comando es muy lento:

Código Delphi [-]
comando := 'select a.CODART,' +
  'a.CODRUB,'+
  'a.DESCRI,'+
  'a.UNIDAD,'+
  'a.PUNPED,'+
  'a.TASA1, '+
  'a.TASA2, '+
  'a.HABILI,'+
  'a.TOTRUB,'+
  'a.TOTDIV,'+
  'a.CODFAB,'+
  'a.AVIPUN,'+
  'a.CANTID,'+
  'a.CANCOM,'+
  'a.CANDIS,'+
  'a.CANPED,'+
  'a.CANTI2,'+
  'a.CANTI3,'+
  'a.CANTI4,'+
  'a.CANTI5,'+
  'a.IMAGEN,'+
  'a.FPREC1,'+
  'a.FPREC2,'+
  'a.FPREC3,'+
  'a.FPREC4,'+
  'a.FPREC5,'+
  'a.FPREC6,'+
  'a.CUSER1,'+
  'a.CUSER2,'+
  'a.CUSER3,'+
  'a.CUSER4,'+
  'a.CUSER5,'+
  'a.CUSER6,'+
  'a.UTILID,'+
  'a.UTILI2,'+
  'a.UTILI3,'+
  'a.UTILI4,'+
  'a.UTILI5,'+
  'a.CODART2,'+
  'a.CODOTR,'+
  'a.COSTOCD,'+
  'a.COSTOVV,'+
  'a.COSTOBE,'+
  'a.COSTOBG,'+
  'a.COSTOBK,'+
  'a.COSTO,  '+
  'a.TASAIB, '+
  'a.PREC1,  '+
  'a.PREC2,  '+
  'a.PREC3,  '+
  'a.PREC4,  '+
  'a.PREC5,  '+
  'a.CANTI6, '+
  'a.CANTI7, '+
  'a.CANTI8, '+
  'a.INFUTI, '+
  'a.TALLE,  '+
  'a.COLOR,  '+
  'a.CODBAR, '+
  'a.NROIMP, '+
  'a.PRESU20,'+
  'a.PRESU25,'+
  'a.PRESU28,'+
  'a.PRESU30,'+
  'a.PRESU40,'+
  'a.COSSINIVA,'+
  'a.D1,     '+
  'a.D2,     '+
  'a.D3,     '+
  'a.D4,     '+
  'a.D5,     '+
  'a.IMPINT,'+
  'a.FLETE,'+
  'a.PRESULU,'+
  'a.COSSIN,'+
  'a.PRECOM,'+
  'a.P1M,'+
  'a.P2M,'+
  'a.P3M,'+
  'a.P4M,'+
  'a.P5M,'+
  'a.PFINAL,'+
  'rubros.descri as desrub, fabrica.descri as desfab, otrcla.descri as desotr FROM articulo a '+

  'left join rubros  on a.codrub = rubros.codrub '  +   //puede ser el LEFT JOIN el problema?
  'left join fabrica on a.codfab = fabrica.codfab ' +
  'left join otrcla  on a.codotr = otrcla.codotr '  ;

  comando := comando + 'where a.habili = ''S'' ';

  comando := comando + 'and a.' + xcampo + ' starting with ''' + xfildes + ''' '

  if xfilrub <> '' then //FILTRO POR RUBRO
     comando := comando + 'and a.codrub = ''' + xfilrub + ''' ';

  comando := comando +'order by a.descri';
 
  datafb.query_articulo.SQL.TEXT := comando;
  datafb.query_articulo.open;

Tengo creados indices por los campos, codart, codrub, codfab, codotr, habili y descri que son los campos necesarios indexar.

Alguien puede orientarme en si algo esta mal?

Gracias!!

ecfisa 03-05-2012 20:05:45

Hola DamianG.

Por favor cuando incluyas código en tus mensajes utiliza TAG's para darle mayor legibilidad. Te pongo una imágen que explica su uso:



Saludos y gracias por tu colaboración. :)

DamianG 03-05-2012 20:10:39

ok ahi lo acomode parece, muchas gracias

roman 03-05-2012 20:18:08

Cita:

Empezado por DamianG (Mensaje 431704)
Tengo creados indices por los campos, codart, codrub, codfab, codotr, habili y descri que son los campos necesarios indexar.

Pero tu consulta tiene un xcampo + ' starting with ' y supongo que debes tener también un índice sobre ese campo.

// Saludos

DamianG 03-05-2012 20:56:54

Si, es el campo DESCRI (xcampo es el nombre en el procedimiento que ejecuta la consulta) y tiene indice, tambien agregue un indice al campo HABILI que es para veri si esta habilitado o no el articulo, el valor es S o N...

Los LEFT JOIN seran el problema?

mightydragonlor 03-05-2012 21:32:11

Cita:

Empezado por DamianG (Mensaje 431714)
Los LEFT JOIN seran el problema?

No Realmente, puede que si, puede que no, no poseemos información suficiente, cantidad de registros, comparativo desde aplicación y administrador de base de datos en cuanto a la ejecución de la consulta, plan de ejecución, servidor, ancho de banda, son muchas las variables, lo que yo suelo hacer en primer lugar, es hacer la consulta en un administrador visual, si es lenta, revisar si es problema de la consulta en si, comentar Joins, funciones, ampliar condiciones y revisar registros retornados, creo que deberías empezar por ahí.

Saludos.


La franja horaria es GMT +2. Ahora son las 08:15:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi