RESOLVIDO - DRE Contabil + Treeview

Prezados boa tarde,

Estou desenvolvendo um Demonstrativo de resultado de uma empresa, onde possui 500 linhas tela(BD 1,6 m), destas separadas em 5 niveis.
Estou utilizando a Subconsulta em 5 niveis, entretanto a consulta esta pesada porque o treeview carrega todos registros. e quando vou fazer o filtro que por sinal precisei fazer manual porque utilizo uma tabela metra para as linhas prinipais do DRE fazendo subquerys, Codigo abaixo.

Quando eu utilizo até uns 3 níveis roda legal, do 4 a 5 fica lento.

Estou pensando em trabalhar somente com um grid e ocultar as linhas que pertencem ao detalhe .
ou criar um treeview dentro da grid.

Alguém já criou algo parecido no SC , tentei ocultar a linha com javascript mas não tive sucesso.

SELECT
id,
treeview,
conta_contabil,
nome,
(select COALESCE(sum(saldo),0) as saldo1 from tab_base force INDEX (geral) where ano = [v_ano] and [v_filtro] and lvl1 = tab_dre_nomes.id ) as atual,
(select COALESCE(sum(saldo),0) as saldo2 from tab_base force INDEX (geral) where ano = [v_ano] and [v_filtro] and lvl1 = tab_dre_nomes.id ) as anterior,
(select COALESCE(sum(saldo),0) as saldo3 from tab_base force INDEX (geral) where ano = [v_ano] and [v_filtro] and lvl1 = tab_dre_nomes.id ) * 1.05 as orcado
FROM
tab_dre_nomes
force INDEX (order1)
where treeview =1
order by id

Sim, desenvolvemos DRE.

Montamos uma tabela temporária co o resultado final já calculado para depois apresentar na grid e usando o sc_link chamamos o mesmo formulário para ser apresentado abaixo com seu detalhe.

Grato pela dica Haroldo, entretanto por motivo de familiarização com um DRE em Excel do cliente com os treeviews eles preferem manter a estruturação semelhante.
Por curiosidade, como o detalhe do SC_link abre abaixo, como você faz quando tem mais de um nivel, vai abrindo vários detalhes abaixo ?
Se não se incomodar e puder compartilhar a tela de como ficou seu trabalho, também agradeço

Abraço

infelizmente não posso mostrar a tela, pois só consigo obter os dados em produção do cliente.

a treeview é dinamica, porem o trabalho é bem manual.

mas a dica principal é, em vez de criar um select complexo, montar uma tabela já com os dados agrupados e detalhados.

Outra alternativa para você, que dependendo das configurações do teu servidor e do teu banco de dados,
usar Views Materializadas.

Visões materializadas são recursos introduzidos na versão 9.3 do postgresql. Enquanto visões tradicionais reexecutam uma consulta sempre que são referenciadas, visões materializadas dispensam este esforço pelos seus dados já estarem guardados desde a sua criação ou do último refresh (atualização de visão). Pode-se dizer que uma visão materializada é um objeto que contém o resultado de uma consulta, facilitando o acesso aos dados nela contidos.

A principal justificativa para se utilizar visões materializadas é a aceleração de consultas em grandes massas de dados. É importante observar que em sistemas com pouco espaço em disco e discos lentos, visões materializadas podem ter pouco efeito ou até impacto negativo por sobrecarregar ainda mais o hardware.

Att,
Paulo.

Sim , quanto a tabela temporária vou seguir sua dica . Obrigado.
Como você trabalha a questão de filtros, atualiza a temporária?

Obrigado pela dica Paulo, conhecia para oracle, mas estou utilizando mysql.

Haroldo,

Novamente muito Obrigado. Ficou excelente a performance.

eu faço assim

nivel, conta, descricao, valor

0, 1, -, 1000
1, 1.1 --, 300
2, 1.1.1, —, 150
2, 1.1.2,— , 150

  1. 1.2, – , 700

Eu crio os registros totalizadores também na tabela temporaria

e mando exibir como sub consulta a propria consulta via sc_link

ficando como recursiva a sub consulta