Ver Mensaje Individual
  #1  
Antiguo 03-05-2012
DamianG DamianG is offline
Miembro
 
Registrado: mar 2008
Posts: 95
Reputación: 17
DamianG Va por buen camino
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!!

Última edición por DamianG fecha: 03-05-2012 a las 20:10:15.
Responder Con Cita