none
Select demorando muito RRS feed

  • Pergunta

  • Pessoal, preciso de uma ajuda.

    Estou com um select que esta demorando quase 10 min para ser executado, por conta do max () e por conta dos parametros de data no AND.

    Alguem pode me ajudar com alguma solução?

    SELECT  dbo.tblWRIRecepcao.PK_Recepcao AS Protocolo, dbo.tblWRIRecepcao.PK_Recepcao + dbo.tblWRIRecepcao.FK_tblWRIClientes_Id AS Senha,

                             dbo.tblWRITpAndamentos.PK_Id AS Andamento_ID,

                                                                            MAX(dbo.tblWRIAndamentos.Data) AS Data

    FROM            dbo.tblWRIAndamentos INNER JOIN

     dbo.tblWRIRecepcao ON dbo.tblWRIRecepcao.PK_Recepcao = dbo.tblWRIAndamentos.FK_tblWRIRecepcaoRecepcao INNER JOIN

     dbo.tblWRITpAndamentos ON dbo.tblWRITpAndamentos.PK_Id = dbo.tblWRIAndamentos.FK_tblWRITpAndamento_Id

    WHERE        (dbo.tblWRITpAndamentos.EnviaInternet = 1)

     AND (dbo.tblWRIAndamentos.Data >= DATEADD(MONTH, - 1, CONVERT(varchar(6), GETDATE(), 112) + '01'))

     AND (dbo.tblWRIAndamentos.FK_tblWRIAndamento_ID_Estorno < 1)

     AND (dbo.tblWRITpAndamentos.TpAndamento = 0) AND (dbo.tblWRITpAndamentos.PK_Id <> 27) AND (dbo.tblWRITpAndamentos.PK_Id <> 71) AND

    (dbo.tblWRITpAndamentos.PK_Id <> 96)

    GROUP BY dbo.tblWRIRecepcao.PK_Recepcao, dbo.tblWRITpAndamentos.DescricaoNaInternet, dbo.tblWRIRecepcao.FK_tblWRIClientes_Id, dbo.tblWRITpAndamentos.PK_Id, dbo.tblWRITpAndamentos.PK_Id,

                             dbo.tblWRIAndamentos.Data

    ORDER BY Data, protocolo DESC


    MCP - MCTS - MCTS AD

    quinta-feira, 2 de julho de 2020 16:58

Todas as Respostas

  • Daniel,

    Primeiro teste a fazer na sua query da forma que ela esta definida:

    Seria possível remover a linha do Order By e a condição de conversão da Data?

    Para esta condição aplicada ao seu código: 

    AND (dbo.tblWRIAndamentos.Data >= DATEADD(MONTH, - 1, CONVERT(varchar(6), GETDATE(), 112) + '01')),

    Você esta utilizando para trazer o primeiro dia do mês? Se for isso....

    Vamos fazer uma alteração, transformar um uma subquery, sem concatenação e convertendo para um tamanho fixo.

    AND (dbo.tblWRIAndamentos.Data >= (SELECT CONVERT(CHAR(8),DATEADD(dd,-(DAY(DATEADD(mm,-1,GetDate()))-1), DATEADD(mm,-1,GetDate())),112))

    Observações:

    Ela é uma das possíveis candidatas a serem substituídas, pois não esta forçando provavelmente o SQL Server a ter que recompilar o seu respectivo plano de execução.

    1 - Qual é o tipo de dados utilizado na coluna Data?

    2 - O porque você esta fazendo esta conversão explícita dos valores da data para concatenar com o valor '01'?

    Gostaria de ter acesso ao Plano de Execução.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 2 de julho de 2020 23:26