[firebase-br] Relatorio de View lenta... alguma alternativa?

SERGIO LOPES sergio.comercialgloria em gmail.com
Seg Nov 26 09:04:23 -03 2018


bom dia,

Tenho uma view q agrupa dados de alguns tabelas:

Inicialmente funcionava tranquilo mais agora depois da base ficar um pouco
maior percebi lentidão quando visualizo esta view (até 40 segundos). Já foi
verificado algumas coisas como:
1 - os campos q estão dispostos nas where já possuem indices, exceto os de
datas;
2 - verifico que quando rodo os selects individualmente nenhum deles
apresenta qualquer lentidão (1 segundo para executar);

já li em alguns lugares que o comando union deixa lento mesmo, existe
alguma forma de melhorar esse script ou utilizar de outro método mais
eficaz q me retorne o mesmo resultado?

CREATE VIEW LISTA_PRODUTOS_VENDA(
    PCODIGO, DESCRICAO, UN,MARCA, DATA, QUANTIDADE, SALDO, TOTAL, GRUPO,
    LK_CLIENTE, CMV, LK_VENDEDOR, TIPO)  AS
select pcodigo, descricao, un, marca_produto, data, qde, saldo_calculado,
v_total, grupo,
lk_cliente, coalesce( (cast( cmv as double precision) * cast( qde as double
precision) ),0) as cmv, lk_vendedor,

case when venda.status in (12,13) then 'CANCELADO'
     when venda.tipo_venda = 4 then 'BONIFICACAO'
     when venda.tipo_venda = 2 then 'AVISTA'
     when venda.status not in (16,18) then 'FATURADO' end as tipo

from venda, vendaitem, lista_produtos_geral
where lk_venda = vcodigo and lk_produto = pcodigo and data >=
current_date-(365*2)

union all

select lancITENS.ITEM, descricao, un, marca_produto, data, qde,
saldo_calculado, t_valor, grupo,
0 as lk_cliente, coalesce( (cast( cmv as double precision) * cast( qde as
double precision) ),0) as cmv, lk_vendedor,  'BALCAO' as tipo
from movto, lanc, lancitens, lista_produtos_geral
where lk_lancamento = lanc.codigo and lk_movimento = movto.codigo and item
= pcodigo
and data >= current_date-(365*2) and lanc.conta <> 99

union all

select lancITENS.ITEM, descricao, un, marca_produto, data, qde,
saldo_calculado, t_valor, grupo,
0 as lk_cliente, coalesce( (cast( cmv as double precision) * cast( qde as
double precision) ),0) as cmv, lk_vendedor,  'CANCELADO' as tipo
from movto, lanc, lancitens, lista_produtos_geral
where lk_lancamento = lanc.codigo and lk_movimento = movto.codigo and item
= pcodigo
and data >= current_date-(365*2) and lanc.conta = 99

union all

select pcodigo, descricao, un, marca_produto, data, qde, saldo_calculado,
t_valor, grupo,
lk_cliente, coalesce( (cast( cmv as double precision) * cast( qde as double
precision) ),0) as cmv, lk_vendedor,

case when orc.status = 55 then 'CANCELADO'
     when coalesce((select r.status from orcremessa r where r.codigo =
orc.lk_remessa),0) in (3,4) then  case when orc.status = 11 then
'BONIFICACAO' else 'EM ROTA' end
     else
        case when orc.status = 11 then 'ROMANEIO BONIF'
        when orc.status not in (10) THEN 'ROMANEIO' ELSE 'OUTROS' end

end as tipo

from orc, orcitem, lista_produtos_geral
where lk_orcamento = orc.codigo and item = pcodigo and data >=
current_date-(365*2)



Mais detalhes sobre a lista de discussão lista