[firebase-br] Query Lenta

Zottis bzottis em ig.com.br
Ter Jul 10 14:01:49 -03 2012


Pessoal, tenho um SQL que esta levando de 6 a 10 segundos para retornar um
só registro

Não to conseguindo achar o problema, alguém poderia me ajudar?

Obrigado antecipadamente

 

O Plan esta assim:

Plano

PLAN (V INDEX (FK_VALORES_CLIENTE_COD_CLIENTE))

PLAN (CR INDEX (FK_CTAREC_CLIENTE, CTAREC_IDX_VENC))

PLAN (CR INDEX (FK_CTAREC_CLIENTE, CTAREC_IDX_VENC))

PLAN (CR INDEX (FK_CTAREC_CLIENTE))

PLAN (CR INDEX (FK_CTAREC_CLIENTE))

PLAN (CR INDEX (FK_CTAREC_CLIENTE))

PLAN (CR INDEX (FK_CTAREC_CLIENTE))

PLAN (CR INDEX (FK_CTAREC_CLIENTE))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (CR INDEX (FK_CTAREC_CLIENTE, CTAREC_IDX_VENC))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (CR INDEX (FK_CTAREC_CLIENTE, CTAREC_IDX_VENC))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (CR INDEX (FK_CTAREC_CLIENTE))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (BOLETOS INDEX (PK_BOLETOS))

PLAN (CR INDEX (FK_CTAREC_CLIENTE))

PLAN (F INDEX (FK_FAR_MTR_CLIENTE))

PLAN (F ORDER FAR_MTR_IDX_DATA_COLETA INDEX (FK_FAR_MTR_CLIENTE))

PLAN (S INDEX (PK_USUARIOS))

PLAN (S INDEX (PK_USUARIOS))

PLAN (G INDEX (PK_GRUPO_CIDADES))

PLAN (COMODATO INDEX (FK_COMODATO_CLI))

PLAN (COMODATO INDEX (FK_COMODATO_CLI))

PLAN (CTAREC INDEX (FK_CTAREC_CLIENTE))

PLAN (CTAREC INDEX (FK_CTAREC_CLIENTE))

PLAN (CTAREC INDEX (FK_CTAREC_CLIENTE))

PLAN (CTAREC INDEX (FK_CTAREC_CLIENTE))

PLAN (FAR_MTR INDEX (FK_FAR_MTR_CLIENTE))

PLAN (EMPRESA INDEX (PK_EMPRESA))

PLAN (C INDEX (PK_CLIENTES))

 

Na tabela principal(Clientes) tenho campos calculados.

 

    NOME_MONTADO           COMPUTED BY (NOME_FANTASIA || ' - '||
RAZAO_SOCIAL || ' - '|| (select E.Sigla from Empresa E where Cod_empresa =
E.Codigo)),

    PROXIMA_COLETA         COMPUTED BY (cast(

                              (select max(F.Data_Coleta)from Far_Mtr F where
F.cod_cliente = Clientes.cod_cliente)

                                    + Clientes.Intervalo_coleta AS date)),

    SERASA                 COMPUTED BY (case

                     when (SELECT COUNT (CT.cod_conta) FROM ctarec CT WHERE
CT.cod_cliente = CLIENTES.cod_cliente and CT.Deletado = 'N' AND CT.serasa =
'S' )> 0 then 'S'

                     when (SELECT COUNT (CT.cod_conta) FROM CTAREC CT WHERE
CT.cod_cliente = CLIENTES.cod_cliente and CT.Deletado = 'N' AND CT.serasa =
'S') = 0 then 'N'

                             end),

    CENTRAL_COBRANCA       COMPUTED BY (case

                         when (SELECT COUNT (CT.cod_conta) FROM ctarec CT
WHERE CT.cod_cliente = CLIENTES.cod_cliente and CT.Deletado = 'N' AND
CT.central_cobranca = 'S' )> 0 then 'S'

                         when (SELECT COUNT (CT.cod_conta) FROM CTAREC CT
WHERE CT.cod_cliente = CLIENTES.cod_cliente and CT.Deletado = 'N' AND
CT.central_cobranca = 'S') = 0 then 'N'

                             end),

    COM_COMODATO           COMPUTED BY (case

                                     when (SELECT COUNT (CMT.cod_comodato)
FROM comodato CMT WHERE CMT.cod_cliente = CLIENTES.cod_cliente ) > 0 then
'S'

                                     when (SELECT COUNT (CMT.cod_comodato)
FROM comodato CMT WHERE CMT.cod_cliente = CLIENTES.cod_cliente ) = 0 then
'N'

                                  end),

 

Segue o SQL:

 

select C.COD_CLIENTE, C.DATA_CAD, C.COD_EMPRESA, C.COD_USUARIO,
C.NOME_FANTASIA,

       C.RAZAO_SOCIAL, C.ENDERECO, C.NO_CASA, C.BAIRRO, C.CEP, C.COD_CIDADE,

       C.FONE, C.CELULAR, C.FAX, C.CPF_CNPJ, C.RG_INSC, C.CONTATO,
C.CONTATO_FINANC,

       C.PROPRIETARIO, C.CPF_PROP, C.RG_PROP, C.DATA_NASC_PROP,
C.ESTADO_CIVIL_PROP,

       C.COD_CID_PROP, C.ENDERECO_PROP, C.BAIRRO_PROP,
C.RESPONSAVEL_TECNICO,

       C.CPF_RESP_TECNICO, C.RG_RESP_TECNICO, C.COD_FUNCAO, C.CONSELHO_NO,

       C.COD_DESTINO, C.COD_AREA_ATUACAO, C.COD_TIPO_AREA,
C.COD_CLASSIF_RESIDUOS,

       C.EMAIL, C.SITE, C.INICIO_CONTRATO, C.FINAL_CONTRATO,

       C.PGRSS, C.RESP_TECNICA, C.INTERVALO_COLETA, C.OBS, C.TIPO_BOMBONA,
C.FORMA_PGTO,

       C.FORMA_PGTO_ABREV, C.DIA_VENCTO,  C.VALOR_KILO,

       C.VALOR_KILO_EXCEDE, C.LIMITE_KILO, C.TAXA_RECOLHIMENTO, C.BOMBONA,
C.EXCLUIDO_POR,

       C.DATA_EXCLUSAO, C.HORA_EXCLUSAO, C.DELETADO, C.QTD_COLETAS,
C.DATA_ATUALIZACAO,

       C.COD_EDITOR, C.RAMAL, C.PESSOA_TIPO, C.ATIVO, C.TAXA_ATRASO,
C.NOME_MONTADO, C.VALOR_MENSAL, C.COD_GRUPO,   

C.COD_CLIENTE_EMPRESA, C.Proxima_Coleta, C.COD_USU_LIB_VALOR,
C.FECHA_MANUAL, C.CONTRATO_IMPRESSO, C.COM_NOTA_FISCAL,

C.COD_MASTER, C.DESCONTO_TAXA, C.TAXA_RETENCAO, C.TIPO_RETENCAO,
C.TAXA_INSS,

C.CONTRATO_RETORNADO, C.SERASA, C.CENTRAL_COBRANCA, C.INADIMPLENTE,
C.BLOQUEADO, C.DATA_ENVIO_CONTRATO, C.DATA_RETOR_CONTRATO,

 

C.ENDERECO_CORRESP,  C.NO_CASA_CORRESP,  C.BAIRRO_CORRESP,  C.CEP_CORRESP,
C.COD_CIDADE_CORRESP, C.COLETA_EXTRAORDINARIA, ISOLAR_BUSCA,

C.com_comodato, C.NF_DESCRICAO, C.RAZAO_SOCIAL_NF, C.CNPJ_NF, C.INSC_NF,
C.FORMA_ENVIO_BOLETO,

 

 

(Select G.GRUPO  from GRUPO_CIDADES G where C.COD_GRUPO = G.CODIGO) AS
GRUPO,

 

(Select S.LOGIN from usuarios S where C.COD_USUARIO = S.Cod_usuario)AS
USUARIO,

 

(Select S.LOGIN from usuarios S where C.COD_EDITOR = S.Cod_usuario) AS
USUARIO_Editor,

 

(select min(F.Data_Coleta)from Far_Mtr F where F.cod_cliente = C.cod_cliente
) as Primeira_Coleta,

 

(select max(F.Data_Coleta)from Far_Mtr F where F.cod_cliente = C.cod_cliente
) as ultima_Coleta,

 

coalesce(

(select sum(CR.saldo) from ctarec CR where CR.COD_CLIENTE = :varCOD_CLIENTE
and CR.Pago = 'N' and CR.deletado = 'N' ),0) as TotalaPagar ,

 

coalesce(

(select sum(CR.VALOR + CR.VLR_JUROS + CR.DESPESAS_EXTRAS - CR.DESCONTO) from
ctarec CR where CR.COD_CLIENTE = :varCOD_CLIENTE and CR.deletado = 'N'),0)
as TotalContas ,

 

coalesce(

(select sum(CR.saldo) from ctarec CR where CR.COD_CLIENTE = :varCOD_CLIENTE
and CR.Pago = 'N' and CR.vencimento >= current_date and CR.deletado = 'N'
),0) as TotalAbertas,

 

coalesce(

(select sum(CR.saldo) from ctarec CR where CR.COD_CLIENTE = :varCOD_CLIENTE
and CR.Pago = 'N' and CR.vencimento < current_date and CR.deletado = 'N'
),0) as TotalVencidas,

 

coalesce(

(select Count(CR.COD_CONTA) from ctarec CR where CR.COD_CLIENTE =
:varCOD_CLIENTE and CR.Pago = 'S' and

CR.Data_Pgto <= CR.Vencimento and CR.deletado = 'N' ),0) as NoPontuais,

 

coalesce(

(Select count(CR.COD_CONTA) FROM Ctarec cr where

  CR.COD_CLIENTE = :varCOD_CLIENTE and CR.Pago = 'S' and CR.deletado = 'N'
),0) as NoCtasPagas,

 

coalesce(

(Select Count(CR.COD_CONTA) FROM Ctarec cr where

CR.COD_CLIENTE = :varCOD_CLIENTE and CR.Pago = 'S' and CR.DATA_PGTO >
CR.VENCIMENTO and CR.deletado = 'N' ),0) as NoAtrasoPorcento,

 

coalesce(

(select Sum(CR.DIAS_ATRASO) from Ctarec cr where

CR.COD_CLIENTE = :varCOD_CLIENTE and CR.Pago = 'S' and CR.deletado = 'N'
),0) as AtrasoDias,

 

coalesce(

(select count(CR.COD_CONTA) from Ctarec cr where

CR.COD_CLIENTE =  :varCOD_CLIENTE and CR.Pago = 'N' and CR.deletado = 'N'
),0) as NoCtasNaoPagas,

 

coalesce(

(select count(CR.COD_CONTA) from ctarec CR where CR.COD_CLIENTE =
:varCOD_CLIENTE and CR.Pago='N' and CR.vencimento >= current_date and
CR.deletado = 'N' ),0) as NoNaovencidas,

 

coalesce(

(select count(CR.COD_CONTA) from ctarec CR where CR.COD_CLIENTE =
:varCOD_CLIENTE and CR.Pago = 'N' and CR.vencimento < current_date and
CR.deletado = 'N' ),0) as noVencidas,

 

coalesce(

(select first 1(V.codigo) from valores_cliente V where V.cod_cliente =
:varCOD_CLIENTE) ,0) as COD_VALOR

 

from clientes C

where   C.deletado = 'N' 

   and C.COD_CLIENTE = :VarCOD_CLIENTE

 




Mais detalhes sobre a lista de discussão lista