Fórum FireBird Lento #52785
14/09/2005
0
2- Nessa mesma aplicação eu coloquei para fazer uma consulta utilizando o mesmo banco de dados mas utilizando a função starting no evento onchange e na hora que digita o nome de um cliente automaticamente ele me mostra os nomes em um grid, mas fica muito lento principalmente quado eu começo com a letra ´M´, e reparei que no meu cadastro existe muitos clientes que o nome começa com a letra ´M´, como é que faço para tirar essa lentidão?
Zoltan
Curtir tópico
+ 0Posts
14/09/2005
Afarias
|estou achando muito lento em uma das maquinas a rotina quando clico
|na opção para incluir um novo cadastro de cliente, será que tem alguma
|maneira de deixar o firebird mais rápido na hora de abrir uma tabela?
se vc está inserindo, pq ´abrir a tabela´? a lentidão depende *muito* do q vc está fazendo... quais os componentes q está usando, como é seu código, quais os comandos SQL está executando, etc...
|2- Nessa mesma aplicação eu coloquei para fazer uma consulta
|utilizando o mesmo banco de dados mas utilizando a função starting no
|evento onchange e na hora que digita o nome de um cliente
|automaticamente ele me mostra os nomes em um grid, mas fica muito
|lento principalmente quado eu começo com a letra ´M´, e reparei que no
|meu cadastro existe muitos clientes que o nome começa com a
|letra ´M´, como é que faço para tirar essa lentidão?
1) certifíque-se de ter um índice nesse campo
2) não use o evento OnChange mas sim espere q o usuário tecle ENTER para então realizar a consulta
T+
Gostei + 0
14/09/2005
Zoltan
Gostei + 0
14/09/2005
Gandalf.nho
Gostei + 0
14/09/2005
Zoltan
Gostei + 0
14/09/2005
Gandalf.nho
Gostei + 0
14/09/2005
Afarias
bom, é verdade ... mas no q diz respeito a performance, tem q se estar ciente é q os campos que estiverem no WHERE e nos JOINS terão seus índices usados automaticamente (independente de/com ou sem ORDER BY)
T+
Gostei + 0
15/09/2005
Zoltan
Gostei + 0
15/09/2005
Rjcerri
procedure TFrmConsultacli.Edit1Change(Sender: TObject);
begin
if length(Edit1.Text) <> 0 then begin
dbdist.DBPed.qrycliente.SQL.Clear;
dbdist.DBPed.qrycliente.SQL.Add(´select * from clientes where upper(nome) starting :no order by nome´);
dbdist.DBPed.qrycliente.ParamByName(´no´).AsString:=edit1.Text;
dbdist.DBPed.Qrycliente.Open;
dbdist.DBPed.Qrycliente.Filtered:=true;
end else
DBDist.DBPed.Qrycliente.Filter:=´´;
end;
Mesmo assim ficou um pouco lento, gostaria de saber se tem haver com a memoria do meu servidor que é 256MB Sempron 2.4. Reparei q fica lento quando estou utilizando o servidor (não é dedicado). O firebird exige de uma boa memória ou de um processador? E esse comando acima posso melhorar para aumentar um pouco a velocidade?
Gostei + 0
15/09/2005
Vinicius2k
Como o Anderson já disse, no OnChange não é ´uma boa´... mas fica a seu critério.
Não há necessidade de limpar a SQL o tempo todo já que vc está usando parametros, nem tampouco mudar a propriedade Filtered.
procedure AlgumProcedimentoAnterior; begin dbdist.DBPed.qrycliente.SQL.Clear; dbdist.DBPed.qrycliente.SQL.Add(´select * from clientes where upper(nome) starting :no order by nome´); end; procedure TFrmConsultacli.Edit1Change(Sender: TObject); begin if length(Edit1.Text) <> 0 then begin dbdist.DBPed.Qrycliente.Close; dbdist.DBPed.qrycliente.ParamByName(´no´).AsString := edit1.Text; dbdist.DBPed.Qrycliente.Open; end; end;
Sobre sobre seu servidor, infelizmente, acho que ele é fraco devido ao
cache reduzido (falando-se apenas do processador, sem contar velocidade de disco e os barramentos) e piora por não ser dedicado.
Sobre seu índice, mesmo tendo-o criado, ele deve ser um índice ´pobre´ por haverem muitos registros que satisfazem a condição que vc solicita. Por isto vc deve solicitar mais informações do usuário antes de postar a solicitação ao servidor, retirando a instrução do OnChange.
T+
Gostei + 0
15/09/2005
Afarias
select * from clientes where
nome starting :no
order by nome
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)