Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #76326
    Anônimo

      Olá Pessoal,

      Sou novata mas quero muito aprender.
      O DBA da empresa que trabalho diz que o select abaixo está causando muita lentidão no banco.
      Utilizo a ferramenta Toad onde fiz o Explain Plain e não deu acesso full em nenhuma tabela. Pelo que vi está fazendo acesso Range Scan em 4 tabelas….mas full em nenhuma.
      Se alguém puder me dar algum dica do que melhorar…. pois já tentei de tudo e não sei mais o que fazer.

      desde já agradeço muito.

      #76328
      Anônimo

        [quote=”edilene.ribeiro”:1xp6gehk]Olá Pessoal,

        Sou novata mas quero muito aprender.
        O DBA da empresa que trabalho diz que o select abaixo está causando muita lentidão no banco.
        Utilizo a ferramenta Toad onde fiz o Explain Plain e não deu acesso full em nenhuma tabela. Pelo que vi está fazendo acesso Range Scan em 4 tabelas….mas full em nenhuma.
        Se alguém puder me dar algum dica do que melhorar…. pois já tentei de tudo e não sei mais o que fazer.

        desde já agradeço muito.[/quote]

        eis o select:

        SELECT espe_evt_cod esp_princ,
        DECODE (a.espe_evt_cod,
        99999999, a.exame,
        DECODE (NVL (b.pcdm_grup_espe_cod, -1), -1, 10014, a.exame)
        ) proced,
        a.exame
        FROM hist_exame a, pcdm_pcm b, espe_esp f
        WHERE :pr_local_id IS NULL
        AND a.mes_ref BETWEEN TO_DATE (:pr_mes_ref, ‘mm/yyyy’)
        AND TO_DATE (:pr_mes_ref2, ‘mm/yyyy’)
        AND a.grp_emp_id = :pr_grp_emp_id
        AND a.prest_id = :pr_prest_id
        AND a.vlr_pago > 0
        AND b.pcdm_cod(+) = a.exame
        AND f.espe_cod(+) = a.exame
        UNION
        SELECT espe_evt_cod esp_princ,
        DECODE (a.espe_evt_cod,
        99999999, a.exame,
        DECODE (NVL (b.pcdm_grup_espe_cod, -1), -1, 10014, a.exame)
        ) proced,
        a.exame
        FROM hist_exame a,
        pcdm_pcm b,
        pred_prt_edr c,
        tiep_prt_edr_tip d,
        recf_fxa_cep_rgi e,
        espe_esp f
        WHERE :pr_local_id IS NOT NULL
        AND a.mes_ref BETWEEN TO_DATE (:pr_mes_ref, ‘mm/yyyy’)
        AND TO_DATE (:pr_mes_ref2, ‘mm/yyyy’)
        AND a.grp_emp_id = :pr_grp_emp_id
        AND a.prest_id = :pr_prest_id
        AND a.vlr_pago > 0
        AND b.pcdm_cod(+) = a.exame
        AND f.espe_cod(+) = a.exame
        AND c.pred_prtd_cod = a.prest_id
        AND d.tiep_pred_cod = c.pred_cod
        AND d.tiep_tip_edr = 3
        AND e.recf_etor_cod = :pr_etor_cod
        AND e.recf_rgio_cod = :pr_local_id
        AND e.recf_cepf_cep_ini = c.pred_cepe_cod
        GROUP BY espe_evt_cod, a.exame, b.pcdm_grup_espe_cod, f.espe_cod
        ORDER BY 1 ASC

        #76330
        Marcio68Almeida
        Participante

          Bom…
          Há muitos itens na sua consulta que são realmente perniciosos à performance…
          1. Quando você utiliza TO_CHAR, TO_DATE, SUBSTR, etc…
          2. Quando você usa Outer Join (+)
          3. Quando você usa >, =, <=, etc…

          A opção :
          e.recf_cepf_cep_ini = c.pred_cepe_cod
          Pode ser substituída por :
          c.pred_cepe_cod between e.recf_cepf_cep_ini AND e.recf_cepf_cep_fim
          A opção :
          a.mes_ref BETWEEN TO_DATE (:pr_mes_ref, 'mm/yyyy') AND TO_DATE (:pr_mes_ref2, 'mm/yyyy')
          Pode ser substituída por :
          TO_CHAR (a.mes_ref, 'yyyymm') BETWEEN :pr_mes_ref AND :pr_mes_ref2

          O fato de estar usando índice não quer dizer que terá uma boa performance…
          Meu conselho é que você faça a sua consulta por partes, inserindo as condições (cláusula where) com mais critério…
          [/code]

          #76332
          Anônimo

            Ok Márcio….vou fazer tudo que vc sugeriu sim.

            Nossa nem sei como lhe agradecer…muito obrigada!!!

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress