Renato wrote:
> -----Mensagem original-----
> De: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Em nome de Evandro
> Ricardo Silvestre
> Enviada em: quarta-feira, 28 de maio de 2008 09:13
> Para: Comunidade PostgreSQL Brasileira
> Assunto: Re: [pgbr-geral] RES: Tabelas temporárias
>
> Renato wrote:
>   
>> -----Mensagem original-----
>> De: [EMAIL PROTECTED]
>> [mailto:[EMAIL PROTECTED] Em nome de Evandro
>> Ricardo Silvestre
>> Enviada em: terça-feira, 27 de maio de 2008 17:05
>> Para: Comunidade PostgreSQL Brasileira
>> Assunto: Re: [pgbr-geral] Tabelas temporárias
>>
>>   
>>     
>>> Renato wrote:
>>>     
>>>       
>>>> Boa tarde
>>>>
>>>> Tenho uma View, que faz consultas em diversas tabelas, com joins,
>>>>         
> unions,
>   
>>>> etc etc, que localmente demora as vezes até 2 segundos pra carregar, mas
>>>>       
>>>>         
>> que
>>   
>>     
>>>> é usada constantemente, em um menu, pra verificar se o usuário tem
>>>>       
>>>>         
>> permissão
>>   
>>     
>>>> pra acessar tal tabela ou form, tal e tal.
>>>>
>>>> Pra reduzir (e muito) essa "demora" fiz o seguinte. Ao abrir a
>>>>         
> aplicação,
>   
>>>>       
>>>>         
>> e
>>   
>>     
>>>> iniciar uma sessão, Dou instrução pra criar uma tabela temporária
>>>>         
> baseada
>   
>>>> naquela view, e dessa forma quando preciso verificar tal permissão, leio
>>>>       
>>>>         
>> a
>>   
>>     
>>>> temp (e não a view), de forma instantânea, mesmo numa conexão lenta.
>>>>
>>>> Porém percebi, pelo PGadmin que estão se acumulando schemas chamados
>>>> pg_temp_1, pg_temp_2, etc, que sei que são usados por essas tabelas
>>>> temporárias, e percebi que estão vazios. Minha pergunta é, esses schemas
>>>> ocupam espaço, ou com o passar do tempo e consequentemente o acúmulo
>>>>       
>>>>         
>> deles,
>>   
>>     
>>>> interfere em alguma coisa? Essa coisa de criar TEMP's, com propósitos
>>>>       
>>>>         
>> como o
>>   
>>     
>>>> meu, é uma boa prática?
>>>>       
>>>>         
>>> Que linguagem de programação está utilizando? Uma sugestão de uma boa 
>>> prática é manter na memória da máquina local, já que você precisa da 
>>> informação diversas vezes ou manter em um arquivo local (economiza 
>>> memória). Na hora que abre a aplicação gera o arquivo, na hora que fecha 
>>> apaga o arquivo. Você terá apenas 1 acesso ao banco.
>>>
>>>
>>> Evandro
>>>     
>>>       
>> Uso Delphi 2007 com Zeos. A tal View além de usar instruções de SQL,
>>     
> também
>   
>> chama funções feitas em plpgsql.
>>
>> Obrigado Evandro, pela sugestão, muito bem vinda!
>>   
>>     
> Faça o seguinte, carregue o resultado da View no cds.
> Depois faça um cds.SaveToFile para salvar no disco.
> Sempre que quiser recuperar, basta um cds.LoadFromFile
>
> Evandro
>
>
> Evandro
> Sua sugestão é muito boa, mas eu não apontei um detalhe importante, o tal
> menu tem submenus, 
> que são todos montados em modo execução, quando clico no item do menu
> principal, conforme a consulta que faço na tal tabela temporária. Tipo:
>
> SELECT * FROM tabela_temporária WHERE id_menu = 1; -- 1 para o 1º submenu, 2
> para o 2º submenu, e assim por diante
>
> E assim trago somente os valores pra montar os itens do submenu clicado.
>
> Minha única preocupação é: 
> 1 - do jeito que faço hoje, comprometo algum desempenho, no geral?
>   
Muito acesso ao banco não é bom. Compromete o desempenho sim. Imagine 
que no momento que o usuário estiver procurando algo no menu ele irá 
abrir vários menus e vários submenus ate encontrá-lo. Se a cada momento 
você lançar uma consulta ao banco terá uma grande carga, por mais rápido 
que a consulta seja. Recomendo você trazer uma arvore completa com o 
menu e submenus. Ao invés de fazer 1 consulta para o menu e 1 para os 
submenus, faça uma consulta que traga tudo! Ao invés de fazer pequenas 
consultas várias vezes, faça 1 grande consulta uma unica vez!
Também não acho uma boa idéia montar em tempo de execução o menu como 
você faz. Pense, ocorre muitas alterações no menu ou sempre é o mesmo? 
se for sempre o mesmo pq toda a vez vc vai desenhá-lo? Acho excelente 
ter menus dinâmicos, mas recomendo que esse menu seja criado 
*completamente* no momento da abertura da aplicação(no OnCreate). Caso 
haja alteração no menu basta o usuário fechar e abrir a aplicação novamente.
Recomendo que você repense essa rotina e reformule-a.

Evandro
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a