Melhor Esse Sql

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
belloo123
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Ter, 08 Nov 2016 10:40 am

Bom dia a Todos .
Estou tentado entender uma coisa, ao executar essa query abaixo , o sql demora para para retornar ,e se rodar pela aplicação a tabela temporária lota usando 33 giga , já revisei e não consigo entender por carga daguas ela faz isso.

Selecionar tudo

select 

(select
  
    to_char( NVL(SUM(A.AN+A.AG),0),'999G999G990D00')MONOFASICO_PIS_VENDA
     from rodox_c100_c170_sped  a, rodox_0200_sped2  b, rodox_ncm c
where  a.a= 'C170'
and a.c=b.b
and b.h=c.ncm
and a.an> 0
AND A.L NOT IN (select CFOP from rodox_cfop
union
select CFOP from rodox_cfop2)  
and trunc(a.ah) between '01' and '40')MONOFASICO_PIS_VENDA,

--cupom -monofasico com pis na venda 
(select 
  to_char(NVL(sum(a.h),0),'999G999G990D00')MONOFASICO_CF_PIS_COFINS
 from rodox_c100_c170_sped  a, rodox_0200_sped2  b, rodox_ncm c
where a.a in ('C481','C485')
and a.i=b.b
and b.h=c.ncm
and a.h >0)MONOFASICO_CF_PIS_COFINS,
--cupom -tributavel sem pis
(select   to_char (NVL(sum (((a.c*0.65)/100)+((a.c*3)/100)),0),'999G999G990D00')TRIBUTAVEL_CF_PIS_COFINS
 
 from rodox_c100_c170_sped  a, rodox_0200_sped2  b
where a.a in ('C481','C485')
and a.i=b.b
and b.h not in (select ncm from rodox_ncm )
and a.h =0)TRIBUTAVEL_CF_PIS_COFINS ,

--MONOFASICO_PIS_COMPRA 

(select
   
     TO_CHAR(NVL(SUM(A.AN+A.AG),0),'999G999G990D00')MONOFASICO_PIS_COMPRA
   
     from rodox_c100_c170_sped  a, rodox_0200_sped2  b, rodox_ncm c
where  a.a= 'C170'
and a.c=b.b
and b.h=c.ncm
and a.an> 0
and trunc(a.ah) between '50' and '90')MONOFASICO_PIS_COMPRA,

--TRIBUTAVEL SEM /COFINS vendas
(select 
to_char(NVL(SUM(((A.G*0.65)/100)+(A.G*3)/100),0),'999G999G990D00') PIS_COFINS
  from rodox_c100_c170_sped  a, rodox_0200_sped2  b
where  a.a= 'C170'
and a.c=b.b
and b.h not in (select ncm from rodox_ncm ) 

and a.an = 0
and a.l not in (select CFOP from rodox_cfop
union
select CFOP from rodox_cfop2) 
and trunc(a.ah) between '01' and '40')TRIBUTAVEL_PIS_VENDA,

--TRIBUTAVEL_sem_COFINS_COMPRA 
(select
to_char(NVL(SUM(((A.G*0.65)/100)+(A.G*3)/100),0),'999G999G990D00') PIS_COFINS
  from rodox_c100_c170_sped  a, rodox_0200_sped2  b
where  a.a= 'C170'
and a.c=b.b
and b.h not in (select ncm from rodox_ncm )
and a.an = 0
and a.l not in (select CFOP from rodox_cfop
union
select CFOP from rodox_cfop2) 
and trunc(a.ah) between '50' and '90')TRIBUTAVEL_SEM_COFINS_COMPRA,

--065

(select TO_CHAR(NVL(SUM(A.AG+A.an),0),'999G999G990D00') AS PIS_COFINS

from rodox_c100_c170_sped a
where  a.a= 'C170'
and a.ad <>'1,65'
and an >'0')VALOR_DIFERENTE,



--TRIBUTAVEL_na_venda

(select 

to_char(NVL(SUM(A.AG+A.an),0),'999G999G990D00') AS PIS_COFINS

from rodox_c100_c170_sped  a
where  a.a= 'C170'
and trunc(a.ah) between '01' and '40')TRIBUTAVEL_VENDA,
--TRIBUTAVEL  na compra

(select 

NVL(SUM(A.AG+A.an),0) AS PIS_COFINS

from rodox_c100_c170_sped  a
where  a.a= 'C170'
and trunc(a.ah) between '50' and '90')TRIBUTAVEL_COMPRA,

--cupom monofasico + monofasico vendas

to_char((select 
  NVL(sum(a.h),0)MONOFASICO_CF_PIS_COFINS
 from rodox_c100_c170_sped  a, rodox_0200_sped2  b, rodox_ncm c
where a.a in ('C481','C485')
and a.i=b.b
and b.h=c.ncm
and a.h >0)+
(select
  
    NVL(SUM(A.AN+A.AG),0)MONOFASICO_PIS_VENDA
     from rodox_c100_c170_sped  a, rodox_0200_sped2  b, rodox_ncm c
where  a.a= 'C170'
and a.c=b.b
and b.h=c.ncm
and a.l not in (SELECT CFOP FROM RODOX_CFOP)
and a.an> 0
and trunc(a.ah) between '01' and '40'),'999G999G990D00' )TOTAL_MONOFASICO_PIS_VENDA,


---total tributavel sem pis venda 
TO_CHAR((select 
NVL(SUM(((A.G*0.65)/100)+(A.G*3)/100),0) PIS_COFINS
  from rodox_c100_c170_sped  a, rodox_0200_sped2  b
where  a.a= 'C170'
and a.c=b.b
and b.h not in (select ncm from rodox_ncm )
and a.an = 0
and a.l not in (select CFOP from rodox_cfop
union
select CFOP from rodox_cfop2) 
and trunc(a.ah) between '01' and '40')
+

(select   NVL(sum (((a.c*0.65)/100)+((a.c*3)/100)),0)TRIBUTAVEL_CF_PIS_COFINS
 
 from rodox_c100_c170_sped  a, rodox_0200_sped2  b
where a.a in ('C481','C485')
and a.i=b.b
and b.h not in (select ncm from rodox_ncm )
and a.h =0),'999G999G990D00')TOTAL_TRIBUTAVEL_SEM_PIS


FROM DUAL
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Brother,na sua query tem o predomínio de muitas subquerys com conversão e operadores aritméticos ,que dependendo da sua massa de dados pode impactar na performance.
Recomendo que revise essa query ,diminuindo o número de subquerys.
souldeath
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qua, 25 Ago 2010 9:39 am
Localização: Limeira

belloo123, vi que em várias dessas subqueries você consulta a mesma tabela e usa os mesmos filtros, por exemplo, a tabela rodox_c100_c170_sped e filtrando por a.a= 'C170'.
A cada execução de subquery vai ter uma operação de leitura nessa tabela, você pode fazer isso uma única vez usando a cláusula WITH, por exemplo:

Selecionar tudo

WITH c100_c170 AS (
  SELECT ...
  FROM   rodox_c100_c170_sped
  WHERE a.a= 'C170')
SELECT campo1, campo2
FROM   c100_c170
Dessa forma você talvez consiga diminuir esse monte de subqueries conforme disse o colega adrianoturbo.

Referência: https://oracle-base.com/articles/misc/with-clause
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante