Fórum Iniciante. DBF x FIREBIRD #533941

08/10/2015

0

Tenho duas tabelas em DBF. TDados e TItens.
TDados tem +/- 120.000 itens
TItens tem +/- 300.000 itens
Fiz a conversão (rotina propria) DBF para FDB.
a Tabela TItens esta relacionada a Tabela TDados.
no Clipper abria as duas tabelas bem rapido, no
Firebird esta demorando bastante (bem mais demorado que no
DBF).

Ex.:
// firebird - esta rotina demora bastante.
with DMArq do
begin
zqTrans.SQL.Clear;
zqTrans.SQL.Add('Select MAX(PedNum) as ULTIMO From Dados');
zqTrans.Open; // aqui demora bastante................
sCodigo := zqTrans.FieldByName('Ultimo').asString;
try
sCodigo := FormatFloat('000000000000000', StrToFloat(sCodigo) + 1);
except
sCodigo := '1';
end;
end;

// dbf - esta rotina é bem rapida
with DMArqSce.qItemCod do
begin
Close;
DataBaseName := Drive_IniR + '\Sistema\Estoque\' + Nr_Ite;
Sql.Clear;
Sql.Add('Select PedNum from TDados order by PedNum');

Open;
Last;

sCod := FieldByName('IteCod').asString;
sCod := Copy(FormatFloat('0000000000', StF(sCod)), 1, 8);
cCod := StrToFloat(sCod);
OCpf := IntToStr(Trunc(ccod) + 1);
CodBar := FormatFloat('00000000', cCod + 1);
ocpf := IntToStr(StrToInt(Calc_dig(OCpf)));

result := oCpf; // qItemCod.FieldByName('IteCod').asString;

Close;
end;

Assim todas as consultas (abrindo toda a tabela - Open) como filtros, no firebird, são bem mais demorados que no DBF.
Isto é normal?
o Firebird não deveria ser mais rapido que o DBF?
o que eu posso fazer para melhorar o Desempenho?
João Hintz

João Hintz

Responder

Posts

14/10/2015

Anderson

Para obter desempenho em SQL, principalmente quando usa grade de dados (dbgrid, browse), tem que retornar poucos registros, normalmente os últimos (5, 10 registros) para o usuário saber aonde parou. Há uma mudança de conceitos entre o padrão xBase e SQL na utilização de recursos.

Pense assim: Nenhum usuário vai querer olhar os 300.000 registros na grade de dados. Mesmo que resolve-se a olhar todos estes registros, provavelmente levaria alguns dias. Considere ainda que estes 300.000 registros trafegando na rede e sendo alocados na memória consomem muitos recursos (o que causa a lentidão).

Também trabalhei com xBase e ao migrar para banco de dados SQL tive que me adaptar a estes novos conceitos. O Firebird pode ser bem mais rápido que o xBase (principalmente em rede), tudo é uma questão de planejamento. Alguns de meus relatórios em xBase que levavam em torno de 01 minuto passaram para cerca de 5 segundos no Firebird.

Att.

Anderson.
Responder

Gostei + 0

14/10/2015

João Hintz

ok. estou tentando me adaptar a este novo banco de dados. Obrigado pela Ajuda.

Obs.: Vi na internet alguma coisa a respeito de utilizar o TDataSetProvier...
vc. conhece?
realmente aumenta a performance?
poderia me dar um exemplo de como funciona?
utilizo o Delphi 7.0, Firebird 2.0 e para acesso utilizo o ZEOS..
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar