Boa tarde, Pessoal...
Aqui na empresa tive uma melhora de performance conforme o Noctifero citou.
Exemplificando como melhoramos, o cenário foi mais ou menos este (tabelas e associações fictícias, apenas para ilustração):
Selecionar tudo
select nf.colunaA
, nf.colunaB
, nfe.colunaA
from tb_nota_fiscal nf
, tb_nfe nfe
where nf.num = nfe.num
and nf.dt between x and y
union
select nf.colunaA
, nf.colunaB
, nfi.colunaA
from tb_nota_fiscal nf
, tb_nfit_tributos nfi
where nf.num = nfi.num
and nf.dt between x and y
union
select nf.colunaA
, nf.colunaB
, nfc.colunaA
from tb_nota_fiscal nf
, tb_nfit_contabil nfc
where nf.num = nfc.num
and nf.dt between x and y
Notem que a tabela de Notas Fiscais foi replicada, com o mesmo range de busca (Where de data),
para os 3 unions.
Isso tornava o nosso processo lento, moroso.
Qual foi a solução adotada no caso?
Selecionar tudo
with nfiscais as (select nf.colunaA
, nf.colunaB
from tb_nota_fiscal nf
where nf.dt between x and y)
select nf.colunaA
, nf.colunaB
, nfe.colunaA
from nfiscais nf
, tb_nfe nfe
where nf.num = nfe.num
union
select nf.colunaA
, nf.colunaB
, nfi.colunaA
from nfiscais nf
, tb_nfit_tributos nfi
where nf.num = nfi.num
union
select nf.colunaA
, nf.colunaB
, nfc.colunaA
from nfiscais nf
, tb_nfit_contabil nfc
where nf.num = nfc.num
Ou seja, apenas uma busca nas Notas Fiscais por range e, nos unions apenas utilização da tabela do With.
Lembro-me que na época o ganho foi imenso (neste caso).
Abraço,
Trevisolli