Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bonamim

Lentidão na Consulta

Recommended Posts

Boa Tarde Pessoal,

 

Sou iniciante ainda em SQL e estou tendo problemas de lentidão na consulta deste script que montei:

 

DECLARE @TIMEZONE  				VARCHAR(50),
	    @BIAS                  	INT,
	    @FROMDATE    			DATETIME,
	    @TODATE               	DATETIME                         
 
SET @FROMDATE = NULL
SET @TODATE = NULL
               
IF @FROMDATE IS NULL OR @TODATE IS NULL
BEGIN
                SET @FROMDATE = CONVERT(DATETIME,CONVERT(VARCHAR,DATEADD(DAY,-7,GETDATE()),112),120)
                SET @TODATE = DATEADD(SECOND,-1,DATEADD(DAY,7,@FROMDATE))
END
 
SELECT DISTINCT DATEADD(MINUTE, TZ1.BIAS, ACT.STARTTIME),
			    DATEADD(MINUTE, TZ2.BIAS, ACT.ENDTIME),
			    ACT.EMPLOYEEID,
			    ACT.ACTIVITYID,
			    DATEDIFF(SECOND, ACT.STARTTIME, ACT.ENDTIME) QTD_SEGUNDOS
		   FROM AAAAAAAAAAAAAAAAAAA ACT (NOLOCK)
		  INNER JOIN BBBBBBBBBBBBBBBBBBBBBBBB WO1 (NOLOCK) ON ACT.EMPLOYEEID = WO1.WORKRESOURCEID
														  AND ACT.STARTTIME BETWEEN WO1.STARTTIME AND ISNULL(WO1.ENDTIME, CAST('99991231' AS DATETIME))
		  INNER JOIN BBBBBBBBBBBBBBBBBBBBBBBB WO2 (NOLOCK) ON ACT.EMPLOYEEID = WO2.WORKRESOURCEID
														  AND ACT.ENDTIME BETWEEN WO2.STARTTIME AND ISNULL(WO2.ENDTIME, CAST('99991231' AS DATETIME))
		  INNER JOIN CCCCCCCCCCCC O1 (NOLOCK) ON WO1.ORGANIZATIONID = O1.ID
		  INNER JOIN CCCCCCCCCCCC O2 (NOLOCK) ON WO2.ORGANIZATIONID = O2.ID
		  INNER JOIN DDDDDDDDDD TZ1 (NOLOCK) ON O1.TIMEZONE = TZ1.TIMEZONE
										    AND NOT((TZ1.ENDTIME <= ACT.STARTTIME)
												 OR (TZ1.STARTTIME > ACT.STARTTIME))
		  INNER JOIN DDDDDDDDDD TZ2 (NOLOCK) ON O2.TIMEZONE = TZ2.TIMEZONE
										    AND NOT((TZ2.ENDTIME <= ACT.ENDTIME)
											     OR (TZ2.STARTTIME > ACT.ENDTIME))
		  WHERE DATEADD(MINUTE, TZ1.BIAS, ACT.STARTTIME) BETWEEN @FROMDATE AND @TODATE
		    AND ACT.ACTIVITYID <> -4001

O resultado deste script é exatamente o que preciso (ajustar o fuso-horário de cada dia/atividade/funcionário, baseado no timzezone da organização de cada funcionário), porém esta demorando mais de 20 horas para processar.

 

Detalhes:

 

Tabela: AAAAAAAAAAAAAAAAAAA

Tem mais de 10.000.000 de registros, separado por dia/hora inicio e dia/hora fim, por funcionário e atividade. (Esses registros são apenas de 7 dias).

 

Tabela: BBBBBBBBBBBBBBBBBBBBBBBB

Tem mais de 4.000.000 de registros, separado por dia/hora inicio e dia/hora fim, por funcionário organização. (Esses registros são apenas de 7 dias).

 

Tabela: CCCCCCCCCCCC

Tem mais de 32.000 de registros, separado por dia/hora inicio e dia/hora fim, e organização. (Esses registros são apenas de 7 dias).

 

Tabela: DDDDDDDDDD

Tem mais de 80.000 de registros, separado por dia/hora inicio e dia/hora fim, e timezone. (Esses registros são apenas de 7 dias).

 

Já criei chaves primárias nos campos de cruzamento e não ajudou.

 

Poderiam me auxiliar?

 

Muito Obrigado!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.