none
Select Demorando Muito RRS feed

  • Pergunta

  • Boa tarde Pessoal,

    Tenho uma rotina de consulta aonde faço uma união de algumas tabelas e uma verificação simples, essa rotina de um tempos para cá está demorando muito e algumas vezes só fica pensando e outras me retorna um erro de "TimeOut" (excedido o tempo limite de espera) antes não demorava tanto e a rotina não sofreu nenhuma modificação, são +- 20 tabelas mas em cada um não tem mais que 50 registros.Já coloquei em Procedure e em View mesmo assim não funcionou.

    Não sei se poder ser "Log de transações" ??

    Query:

       SELECT  

                t.nome_fantasia, a.CodCentro 

                FROM checklist_frm_003 a 
                LEFT JOIN checklist_frm_004 d ON a.CodCentro = d.CodCentro AND a.CodPaciente = d.CodPaciente  
                LEFT JOIN checklist_frm_005 e ON a.CodCentro = e.CodCentro AND a.CodPaciente = e.CodPaciente  
                LEFT JOIN checklist_frm_006 f ON a.CodCentro = f.CodCentro AND a.CodPaciente = f.CodPaciente  
                LEFT JOIN checklist_frm_007 g ON a.CodCentro = g.CodCentro AND a.CodPaciente = g.CodPaciente  
                LEFT JOIN checklist_frm_008 h ON a.CodCentro = h.CodCentro AND a.CodPaciente = h.CodPaciente  
                LEFT JOIN checklist_frm_009 i ON a.CodCentro = i.CodCentro AND a.CodPaciente = i.CodPaciente  
                LEFT JOIN checklist_frm_010 j ON a.CodCentro = j.CodCentro AND a.CodPaciente = j.CodPaciente  
                LEFT JOIN checklist_frm_011 k ON a.CodCentro = k.CodCentro AND a.CodPaciente = k.CodPaciente  
                LEFT JOIN checklist_frm_012 l ON a.CodCentro = l.CodCentro AND a.CodPaciente = l.CodPaciente  
                LEFT JOIN checklist_frm_013 m ON a.CodCentro = m.CodCentro AND a.CodPaciente = m.CodPaciente  
                LEFT JOIN checklist_frm_014 n ON a.CodCentro = n.CodCentro AND a.CodPaciente = n.CodPaciente  
                LEFT JOIN checklist_frm_015 o ON a.CodCentro = o.CodCentro AND a.CodPaciente = o.CodPaciente  
                LEFT JOIN checklist_frm_016 p ON a.CodCentro = p.CodCentro AND a.CodPaciente = p.CodPaciente  
                LEFT JOIN checklist_frm_017 q ON a.CodCentro = q.CodCentro AND a.CodPaciente = q.CodPaciente  
                LEFT JOIN checklist_frm_018 r ON a.CodCentro = r.CodCentro AND a.CodPaciente = r.CodPaciente  
                LEFT JOIN checklist_pav s ON a.CodCentro = s.CodCentro AND a.CodPaciente = s.CodPaciente  
                LEFT JOIN checklist_CadCentro t ON a.CodCentro = t.CodCentro 

                WHERE 
                (a.vm_n = '1') 
                OR (d.vm_n = '1') 
                OR (e.vm_n = '1') 
                OR (f.vm_n = '1') 
                OR (g.vm_n = '1') 
                OR (h.vm_n = '1') 
                OR (i.vm_n = '1') 
                OR (j.vm_n = '1') 
                OR (k.vm_n = '1') 
                OR (l.vm_n = '1') 
                OR (m.vm_n = '1') 
                OR (n.vm_n = '1') 
                OR (o.vm_n = '1') 
                OR (p.vm_n = '1') 
                OR (q.vm_n = '1') 
                OR (r.vm_n = '1') 

                GROUP BY a.CodCentro, t.nome_fantasia 

                ORDER BY a.CodCentro  

     

    terça-feira, 1 de abril de 2014 18:07

Respostas

  • Boa tarde,

    Tiaguinho, experimente fazer um teste para ver o que acontece:

    SELECT  
        t.nome_fantasia, 
        a.CodCentro 
    FROM checklist_frm_003 a 
    LEFT JOIN checklist_CadCentro t WHERE a.CodCentro = t.CodCentro 
    WHERE 
        a.vm_n = '1' or
        exists 
            (select 1 from checklist_frm_004 d 
             WHERE a.CodCentro = d.CodCentro AND a.CodPaciente = d.CodPaciente AND d.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_005 e 
             WHERE a.CodCentro = e.CodCentro AND a.CodPaciente = e.CodPaciente AND e.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_006 f 
             WHERE a.CodCentro = f.CodCentro AND a.CodPaciente = f.CodPaciente AND f.vm_n = '1') OR  
        exists 
            (select 1 from checklist_frm_007 g 
             WHERE a.CodCentro = g.CodCentro AND a.CodPaciente = g.CodPaciente AND g.vm_n = '1') OR  
        exists 
            (select 1 from checklist_frm_008 h 
             WHERE a.CodCentro = h.CodCentro AND a.CodPaciente = h.CodPaciente AND h.vm_n = '1') OR 
        exists 
            (select 1 from checklist_frm_009 i 
             WHERE a.CodCentro = i.CodCentro AND a.CodPaciente = i.CodPaciente AND i.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_010 j 
             WHERE a.CodCentro = j.CodCentro AND a.CodPaciente = j.CodPaciente AND j.vm_n = '1') OR 
        exists 
            (select 1 from checklist_frm_011 k 
             WHERE a.CodCentro = k.CodCentro AND a.CodPaciente = k.CodPaciente AND k.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_012 l 
             WHERE a.CodCentro = l.CodCentro AND a.CodPaciente = l.CodPaciente AND l.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_013 m 
             WHERE a.CodCentro = m.CodCentro AND a.CodPaciente = m.CodPaciente AND m.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_014 n 
             WHERE a.CodCentro = n.CodCentro AND a.CodPaciente = n.CodPaciente AND n.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_015 o 
             WHERE a.CodCentro = o.CodCentro AND a.CodPaciente = o.CodPaciente AND o.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_016 p 
             WHERE a.CodCentro = p.CodCentro AND a.CodPaciente = p.CodPaciente AND p.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_017 q 
             WHERE a.CodCentro = q.CodCentro AND a.CodPaciente = q.CodPaciente AND q.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_018 r 
             WHERE a.CodCentro = r.CodCentro AND a.CodPaciente = r.CodPaciente AND r.vm_n = '1') OR
        exists 
            (select 1 from checklist_pav s 
             WHERE a.CodCentro = s.CodCentro AND a.CodPaciente = s.CodPaciente AND s.vm_n = '1')

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Tiaguinho_S.F terça-feira, 1 de abril de 2014 21:08
    terça-feira, 1 de abril de 2014 20:56

Todas as Respostas

  • o que diz o plano de execução? Chegou a dar uma olhada?

    terça-feira, 1 de abril de 2014 18:17
  • É do erro que você esta falando :

    Messagem: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

    E ainda por cima só para mostrar esse erro fica aprox.. 8 minutos...

    terça-feira, 1 de abril de 2014 18:36
  • Olá GuSouza,

    Obrigado, de qualquer forma implicitamente já esta aplicando todos estes conceitos.

    terça-feira, 1 de abril de 2014 19:04
  • Já tentou reindexar o banco de dados? uma vez tive problemas do tipo que resolvi dessa forma:

    http://www.lucascm.com.br/reindexar-banco-de-dados-sql-server/

    terça-feira, 1 de abril de 2014 19:51
  • Ok, Gusouza !

    Vou tentar aqui e depois que conseguir te marco, blz.

    terça-feira, 1 de abril de 2014 20:18
  • Então Gusouza,

    Reindexei toda a base de dados e mesmo assim não adiantou executei a rotina e continuou demorando.

    Script de Reindexação:

    http://www.inoveti.com.br/2011/08/script-para-reindexar-banco-mssql/

    terça-feira, 1 de abril de 2014 20:39
  • Boa tarde,

    Tiaguinho, experimente fazer um teste para ver o que acontece:

    SELECT  
        t.nome_fantasia, 
        a.CodCentro 
    FROM checklist_frm_003 a 
    LEFT JOIN checklist_CadCentro t WHERE a.CodCentro = t.CodCentro 
    WHERE 
        a.vm_n = '1' or
        exists 
            (select 1 from checklist_frm_004 d 
             WHERE a.CodCentro = d.CodCentro AND a.CodPaciente = d.CodPaciente AND d.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_005 e 
             WHERE a.CodCentro = e.CodCentro AND a.CodPaciente = e.CodPaciente AND e.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_006 f 
             WHERE a.CodCentro = f.CodCentro AND a.CodPaciente = f.CodPaciente AND f.vm_n = '1') OR  
        exists 
            (select 1 from checklist_frm_007 g 
             WHERE a.CodCentro = g.CodCentro AND a.CodPaciente = g.CodPaciente AND g.vm_n = '1') OR  
        exists 
            (select 1 from checklist_frm_008 h 
             WHERE a.CodCentro = h.CodCentro AND a.CodPaciente = h.CodPaciente AND h.vm_n = '1') OR 
        exists 
            (select 1 from checklist_frm_009 i 
             WHERE a.CodCentro = i.CodCentro AND a.CodPaciente = i.CodPaciente AND i.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_010 j 
             WHERE a.CodCentro = j.CodCentro AND a.CodPaciente = j.CodPaciente AND j.vm_n = '1') OR 
        exists 
            (select 1 from checklist_frm_011 k 
             WHERE a.CodCentro = k.CodCentro AND a.CodPaciente = k.CodPaciente AND k.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_012 l 
             WHERE a.CodCentro = l.CodCentro AND a.CodPaciente = l.CodPaciente AND l.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_013 m 
             WHERE a.CodCentro = m.CodCentro AND a.CodPaciente = m.CodPaciente AND m.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_014 n 
             WHERE a.CodCentro = n.CodCentro AND a.CodPaciente = n.CodPaciente AND n.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_015 o 
             WHERE a.CodCentro = o.CodCentro AND a.CodPaciente = o.CodPaciente AND o.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_016 p 
             WHERE a.CodCentro = p.CodCentro AND a.CodPaciente = p.CodPaciente AND p.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_017 q 
             WHERE a.CodCentro = q.CodCentro AND a.CodPaciente = q.CodPaciente AND q.vm_n = '1') OR
        exists 
            (select 1 from checklist_frm_018 r 
             WHERE a.CodCentro = r.CodCentro AND a.CodPaciente = r.CodPaciente AND r.vm_n = '1') OR
        exists 
            (select 1 from checklist_pav s 
             WHERE a.CodCentro = s.CodCentro AND a.CodPaciente = s.CodPaciente AND s.vm_n = '1')

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Tiaguinho_S.F terça-feira, 1 de abril de 2014 21:08
    terça-feira, 1 de abril de 2014 20:56
  • Obrigado Gapimex !

    Funcionou certinho.

    terça-feira, 1 de abril de 2014 21:15