[firebase-br] Consulta UNION Lenta

Eliomar eliomar em promediconet.com.br
Dom Abr 24 04:15:22 -03 2005


Olá Eduardo... é Vivendo e aprendendo... 
Fiquei curioso com o que vc me disse e fiz alguns
teste, ficou meio grande mais valeu a pena... 
usando condição where codigo > 0 gasta se um 
pouquinho mais de tempo mais usa se menos memória.
e usando o union all bateu todos os recordes tempo 0ms. rsrsr

usando 
select * from tb
union
select * from tb2
------ Performance info ------
Prepare time = 15ms
Execute time = 907ms
Avg fetch time = 100,78 ms
Current memory = 850.992
Max memory = 991.100
Memory buffers = 2.048
Reads from disk to cache = 3.058
Writes from cache to disk = 6
Fetches from cache = 406.111

usando 
select * from tb where codigo > 0
 union
select * from tb2 where codigo > 0
------ Performance info ------
Prepare time = 15ms
Execute time = 985ms
Avg fetch time = 109,44 ms
Current memory = 859.632
Max memory = 925.332
Memory buffers = 2.048
Reads from disk to cache = 3.736
Writes from cache to disk = 6
Fetches from cache = 400.725

usando 
select * from tb
union all 
select * from tb2
------ Performance info ------
Prepare time = 0ms
Execute time = 0ms
Avg fetch time = 0,00 ms
Current memory = 744.900
Max memory = 869.632
Memory buffers = 2.048
Reads from disk to cache = 0
Writes from cache to disk = 6
Fetches from cache = 651


Agradecido.
Eliomar,
ICQ - 167715482
Soft-Data Softwares Administrativos
hptt://www.promediconet.com.br


------------- Segue mensagem original! -------------

De: eduardo <eduardo em icontroller.com.br>
Data: Sat, 23 Apr 2005 09:17:35 -0300
Para: lista em firebase.com.br
Assunto: Re: [firebase-br] Consulta UNION Lenta

Oi Eliomar

Desculpe, mas acho que não é bem assim.
Se você quer todos os registros de uma tabela,
enganar o Servidor que existe um critério,
certamente acarretará em queda de performance,
uma vez que a cada Row ele, obrigatoriamente, vai
testar o WHERE.
A busca natural, sem índices, neste caso seria a
mais apropriada.

No caso em questão:
O mais provável é que, por não haver critério,
a quantidade de linhas retornada é muito grande.
Observe que no UNION, o Servidor terá que trazer
todas as linhas da TB1, depois buscar todas as da TB2
comparando a cada linha se não existe uma igual.

Dependendo do que se quer, se não houver possibilidade
de linhas iguais nas duas tabelas, será melhor utilizar
UNION ALL. Desta forma o Servidor não teria o trabalho
desnecessário de comparar se a linha já existe no ResultSet.

Em ambos os casos, é necessário verificar o componente
utilizado, pois trazer dados muito volumosos em um
xClientDataSet sem PacketRecords também degrada muito
a performance, uma vez que todo o ResultSet tem que
transitar na rede e ser armazenado na memória de uma só vez.

Espero ter contribuído

[]s Eduardo



Eliomar wrote:
> Você não usou nenhuma condição isso faz
> com que o banco use idx natutal o que faz 
> ficar lento, mesmo que queira que aparece 
> todos vc tem que usar uma condição por ex:
> 
> select * from tb1 where codigo > 0
> 
> Entendeu?
> 
> Agradecido.
> Eliomar,
> ICQ - 167715482
> Soft-Data Softwares Administrativos
> hptt://www.promediconet.com.br
> 
> 
> ------------- Segue mensagem original! -------------
> 
> De: "Silenus Systems LTDA" <silenus em silenus.com.br>
> Data: Fri, 22 Apr 2005 16:53:57 -0400
> Para: lista em firebase.com.br
> Assunto: [firebase-br] Consulta UNION Lenta
> 
> 
> Ex
> 
> Select ID, DESCRICAO FROM TB1
> UNION
> Select ID, DESCRICAO FROM TB2
> 
> Alguem sabe por que isso ocorre no Firebird 1.5.2?? Ou sugere algo
> diferente.
> 
> 
> 
> 
> 
> 
> 
> ______________________________________________
> 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://search.gmane.org/search.php?group=firebase
> 


______________________________________________
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://search.gmane.org/search.php?group=firebase







Mais detalhes sobre a lista de discussão lista