Olá, pessoal
Estou fazendo uma query aqui que visa saber se um arquivo foi recebido por uma empresa em determinado período e me deparei com uma situação curiosa.
Gostaria, se possível, de uma ajuda para tentar entender e ver se consigo melhorar o custo.
A parte da query com o count é um trecho que eu retirei de uma query maior para facilitar a visualização e coloquei ela em um select a partir da tabela de empresa.
Se eu realizar esta query sem fazer internamente o join com empresa, conforme destacado, o custo, no meu banco local, é de 16.
Se eu realizar esta query fazendo internamente o join com empresa, conforme destacado, o custo, no meu banco local, é de 39997.
Estou fazendo alguma coisa errado? Não consegui entender o por que de eu adicionar o filtro por empresa e o custo disparar dessa forma.
select (select count(*)
from (select ad.ID_ORIGEM_ARQUIVO_ARQ,l.id_empresa
from edi_arquivo_fisico af
inner join edi_arquivos_diarios ad on ad.id_arquivo_fisico = af.id_arquivo_fisico
inner join edi_arq_diarios_arq_loja adl on adl.id_arquivos_diarios = ad.id_arquivos_diarios
inner join edi_arquivo_loja al on al.id_arquivo_loja = adl.id_arquivo_loja
inner JOIN CAD_LOJA l ON l.id_loja = al.ID_LOJA
where af.ID_ORIGEM_ARQUIVO = 11
and l.id_empresa = emp.id_empresa
and ad.ID_ORIGEM_ARQUIVO_ARQ = 10
and al.ID_ORIGEM_ARQUIVO = 11
AND af.dt_inclusao >= sysdate-3
AND af.dt_inclusao <= sysdate-3
group by ad.ID_ORIGEM_ARQUIVO_ARQ, l.id_empresa)) qtd
from cad_empresa emp;