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)
-   -   lentitud al ordenar tabla (https://www.clubdelphi.com/foros/showthread.php?t=86870)

anubis 15-10-2014 19:03:45

lentitud al ordenar tabla
 
Buenas amigos,

Vereis, tengo 2 querys, en uno tengo productos con su nombre y en el otro tengo ventas de productos pero almaceno solo el id del producto.

cuando hago la consulta, relaciono el id del producto de ventas con el id del producto de productos y me saca el nombre.

Eso es normal y sin problemas, me saca los datos rapido, son 60 registros.

Si le añado un sortfields o indexfieldnames por nombre de producto para que los saque ordenados en ventas, ahi me tarda, no mucho claro, pero para 60 registros creo que es bastante ( que hara con 500 registros?).

Si hago lo mismo con flamerobin tambien tarda, y si, tengo indexados las tablas por nombre de producto y por id de producto.

Estoy usando lazarus y componentes zeos.

Casimiro Notevi 15-10-2014 19:12:53

No entiendo, ¿haces un select ordenador por un campo y es lento?, ejemplo:
Código SQL [-]
select codigo, nombre from cliente order by codigo

anubis 15-10-2014 19:52:38

No no,

Tengo esto:

Código Delphi [-]
fmodulo.zqcortesventas.SQL.Clear;
fmodulo.zqcortesventas.SQL.Text:='select a.* from cortesventas a where  a.id_corte =:corte';
fmodulo.zqcortesventas.ParamByName('corte').asinteger:=corte;
fmodulo.zqcortesventas.active:=true;

Código Delphi [-]
Campo                 := Tstringfield.Create(fmodulo.zqcortesventas);
   Campo.FieldName       := 'nombrepro';
    campo.size               :=100;
   campo.FieldKind       :=fklookup;
   campo.keyfields        :='id_producto';
   campo.lookupdataset   :=fmodulo.zqproductos;
   campo.lookupkeyfields :='id_producto';
   campo.lookupresultfield:='nombreproducto';
   Campo.DataSet         := fmodulo.zqcortesventas;

No tardada nada sino lo ordeno, si lo ordeno si, tiene que hacer el select de arriba, acceder a la tabla de productos y sacar el nombre.

Ya lo arregle de otra forma y parece que si es rapido y funciona. Lo que tiene no pensar :(.

Código Delphi [-]
fmodulo.zqcortesventas.SQL.Clear;
fmodulo.zqcortesventas.SQL.Text:='select a.*,b.id_producto,b.nombreproducto as nombrepro from cortesventas a, productos b where a.id_producto=b.id_producto and a.id_corte =:corte';
fmodulo.zqcortesventas.ParamByName('corte').asinteger:=corte;
fmodulo.zqcortesventas.active:=true;

En la creacion del campo solo cree el campo nombrepro y ya trabaja rapido, en vez de usar un fklookup.

Casimiro Notevi 15-10-2014 20:12:10

No recuerdo haber usado esa manera de obtener datos.
¿Por qué no haces un select normal y corriente?
Código Delphi [-]
select a.codigo 
from ventas a
inner join clientes c on c.codigo=a.cliente
where a.codigo = ?

anubis 15-10-2014 21:22:12

Correcto casimiro, tambien sirve y creo que mejor.
Código SQL [-]
select a.*,b.ID_PRODUCTO,b.NOMBREPRODUCTO as nombrepro from cortesventas a inner join PRODUCTOS b on a.ID_PRODUCTO=b.ID_PRODUCTO where a.ID_CORTE=36


La franja horaria es GMT +2. Ahora son las 04:57:00.

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