[firebase-br] Modo que o DBExpress trata o sql

Pha-Lista lista em pha.com.br
Qui Jun 30 13:11:48 -03 2005


> Sei que pode parecer meio off-topic, porém é uma dúvida relacionada ao 
> Firebird e outros BD quando se usa a camada DBX no Delphi para acesso.
> 
> Quando se ativa o TClientDataSet, é feito um fetch em toda tabelo do 
> banco de dados, ou apenas nos registros que serão listados, e em um 
> DBGRID como isso ficaria?

   Isso depende da propriedade PacketRecords se for maior que 0, seram trasidos somente a quantidade definida por vez, mais em algums comando como Index, Locate, Last etc,  todos os registro serao trazidos.

   De qualquer forma no FB e complicado voce nao trazer todos os registros de um select, pois a transacao nao podera ser fechada ate que todos os registros sejam retornados.

  Por isso o ideal e retornar o minimo possivel de registros, mais existe caso em que e mais rapido trazer os registro para o cliente e trabalhar neles do que ficar fazendo selects no banco, tem que analizar cada caso, velocidade de conexao, etc.

  O DBGrid, DBLookup trabalham muito bem com o TClientDataSet, pois os dados ja estao em memoria, o unico problema e o tempo para carregar os dados, mais depois de carregados as operacoes sao super rapidas.

 Com o TClientDataSet voce pode ate fazer cache local para as tabelas que nao sao alteradas com frequencia.

> 
> No momento em que é necessário realizar consultas, vocês usam o método 
> "findkey / findnerearst" ou a escrevem com "where/order by", qual a 
> vantagem de um pra outro?

Use where e order by quando for trabalhar com os dados vindo diretamente do banco

Use findkey, findnerearst, locate, indexfieldbyname, indexfield quando for processar os dados que estao no cliente que ja foram buscados no banco.

> Será que o DBX quando colocamos o campo de índice no "IndexFieldNames", 
> envia para o firebird qual o indice correto para fazer a busca ou ele 
> carregada todo banco na na memoria e ordena no cache?

Nao, IndexFieldNames e utilizado para fazer odenacao no dados que estao em cache, nao tem nada haver com o banco.

> numa dessa pra que 
> serviriam os indices no delphi com DBX?

Para ordernar e acelerar as procuras no cache com o comando findkey.

> 
> É normal com vocês, mesmo que uma tabela do FB tenha indices criados, 
> eles não apareçam no "IndexFieldNames/IndexName" ?

Sim, e melhor que nao apareça pois se aparecerem o TClientDataSet cria todos os indices em memoria tornando o tempo de abertura muito mais lento.

Inclusive para ter uma performance melhor o ideal e definir no TSQLDataSet a propriedade NoMetaData = True.

Tem tambem o flag [poRetainServerOrder] da propriedade Options do TDataSetProvider, que pode ser definida, assim o TClientDataSet usa a ordem que vem do banco e nao criara um indice em memoria

PHA
Nova Odessa / SP - Brazil

-----Mensagem original-----
From: Lucas Zampar firebird em zampar.com.br
Date: Thu, 30 Jun 2005 10:36:44 -0300
To: lista em firebase.com.br
Subject: [firebase-br] Modo que o DBExpress trata o sql

> 
> 
> Atenciosamente,
> 
> 
> Lucas Zampar
> 
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista