Ir para conteúdo
Fórum Script Brasil
  • 0

Problema de performance numa Query


sebola

Pergunta

Bom dia a todos,

Sou iniciante em banco de dados, estou trabalhando a pouco tempo na área e me deparei com um problema de performance ao executar uma query.

Eu criei um painel de monitoração que fica executando essa query para trazer alguns dados de 10 em 10 segundos.

Segue o código abaixo:

DECLARE @DataIni datetime 
SELECT @DataIni = CONVERT(varchar(4),DATEPART(YEAR,GETDATE()))+'-'+CONVERT(varchar(2),DATEPART(MONTH,GETDATE()))+'-'++CONVERT(varchar(2),DATEPART(DAY,GETDATE()))+' '+'00:00:00'
    SELECT    Chamado.SolID,
            Chamado.SolData Abertura,
            HR.Data TransPrimeiroNivel,
            HR.DataAssumido Assumido,
            dbo.Function_FormataHoraMinutoSegundo(DATEDIFF(SECOND, HR.Data,HR.DataAssumido)) Tempo
    FROM
            HistoricoResponsavel HR (NOLOCK)
            INNER JOIN Solicitacao Chamado (NOLOCK) ON (Chamado.SolID = HR.SolID) 
    WHERE    
            HR.Data BETWEEN @DataIni AND (SELECT GETDATE())
            AND HR.UsuID = 3 
ORDER BY Tempo DESC

Eu sei que o problema está na conversão da data inicial, pois se eu informar a data inicial ele executa em menos de 1 segundo. Esse painel deve ser dinâmico e a cada dia ele deve buscar os dados entre primeira hora do dia atual até o momento atual, ou seja, das '00:00:00' até o GETDATE().

Existe alguma outra solução que não afete a performance da query? A mesma está demorando em torno de 10 a 15 segundos para executar.

Obrigado a todos

Att,

Editado por sebola
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Caso interesse alguém.. descobri uma solução.

Calcular a data pelo ASP e enviar pronto na query pro SQL:

Está executando em menos de 1 segundo.

ASP:

ataData = year(date()) & "-" & month(date()) & "-" & day(date()) & " 00:00:00"

strSQL =          " SELECT Chamado.SolID,"
strSQL = strSQL & " Chamado.SolData Abertura,"
strSQL = strSQL & " HR.Data TransPrimeiroNivel,"
strSQL = strSQL & " HR.DataAssumido Assumido,"
strSQL = strSQL & " dbo.Function_FormataHoraMinutoSegundo(DATEDIFF(SECOND, HR.Data,HR.DataAssumido)) Tempo"
strSQL = strSQL & " FROM"
strSQL = strSQL & " HistoricoResponsavel HR (NOLOCK)"
strSQL = strSQL & " INNER JOIN Solicitacao Chamado (NOLOCK) ON (Chamado.SolID = HR.SolID) "
strSQL = strSQL & " WHERE  "  
strSQL = strSQL & " HR.Data BETWEEN '" & ataData & "' AND (SELECT GETDATE())"
strSQL = strSQL & " AND HR.UsuID = 3 "
strSQL = strSQL & " ORDER BY Tempo DESC"

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde Sebola,

Dá uma olhada se melhora desta forma:

DECLARE @DataIni DATETIME

set @DataIni = convert(VARCHAR(10), GETDATE(),120) + ' 00:00:00'

Fulvio,

Testei e realmente melhorou, executou em 1 segundo.

As duas alternativas resolveram o problema, agora não sei qual a mais adequada..

Alguma idéia?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...