이전에는 사용하던 테이블 반환 함수가 있지만 더 이상은 아니거나 적어도 많은 시간이 걸립니다.테이블 반환 함수
유일한 변경 사항은 쿼리가 읽는 테이블에있는 데이터의 양입니다.
이것은 기능 코드입니다.
ALTER FUNCTION [dbo].[SUPERVISOR_NOMINA2] (@iniDATE DATE,@endDATE DATE)
RETURNS @TABLA TABLE (
[ID] INT NOT NULL PRIMARY KEY CLUSTERED
,[EFEC] FLOAT NOT NULL
,[TOP] FLOAT NOT NULL
,[EXTRA] FLOAT NOT NULL
,[DEUDA] FLOAT NOT NULL
)
AS
BEGIN
INSERT INTO @tempTABLE
/*------RUN FROM HERE TO TEST-------
DECLARE @iniDATE DATE,@endDATE DATE
SET @iniDATE = '2013-02-20'
--*/
SELECT
SOURCE.[ID],SOURCE.[NAME],SOURCE.[CAMPAIGN],[SUPERVISOR],[FLOOR MANAGER],[LAST LOGON],[EFEC],[TOP]
,[HR+] AS EXTRA
,CASE
WHEN [DIF] >= 0 THEN 0
ELSE [DIF]
END AS DEUDA
FROM (
SELECT
NM.[ID]
,NM.[NAME]
,NM.[CAMPAIGN]
,NM.[SUPERVISOR]
,SUM(CASE
WHEN [ATT ID] > 4 AND [ATT ID] <> 7 THEN '0'
ELSE ROUND([EFEC],2)
END) AS [EFEC]
,SUM(CASE
WHEN [ATT ID] > 4 AND [ATT ID] <> 7 THEN '0'
ELSE [TOP]
END) AS [TOP]
,SUM(CASE
WHEN [ATT ID] > 4 AND [ATT ID] <> 7 THEN '0'
WHEN [EFEC] < [TOP] THEN 0
WHEN [TOP]+[EXHR] > [EFEC] THEN ROUND([EFEC]-([TOP]+[EXHR]),0,1)
ELSE [EXHR]
END) AS [HR+]
,ROUND(SUM(CASE
WHEN [ATT ID] > 4 AND [ATT ID] <> 7 THEN '0'
WHEN [EFEC] < [TOP] THEN ROUND([EFEC]-[TOP],2)
WHEN [TOP]+[EXHR] > [EFEC] THEN ROUND([EFEC]-([TOP]+ROUND([EFEC]-([TOP]+[EXHR]),0,1)),2)
ELSE ROUND([EFEC]-([TOP]+[EXHR]),2)
END),2) AS [DIF]
FROM [WFO].[dbo].[VIEW_NOMINA] NM
FULL JOIN [WFO].[dbo].[VIEW_ATTENDANCE] AT ON NM.ID = AT.ID AND NM.DATE = AT.DATE
WHERE NM.DATE < CONVERT(DATE,GETDATE()) AND NM.[DATE] BETWEEN @iniDATE AND @endDATE
GROUP BY NM.[ID],NM.[NAME],NM.[CAMPAIGN],NM.[SUPERVISOR]) SOURCE
LEFT JOIN (
SELECT [ID],CONVERT(DATE,MAX(DATETIME)) AS [LAST LOGON]
FROM [WFO].[dbo].[AGENT-LOGBOOK]
GROUP BY [ID]
) LT ON LT.ID = SOURCE.ID
LEFT JOIN [WFO].[dbo].[SUPERVISORS] SP ON SP.NAME = SOURCE.SUPERVISOR
ORDER BY [NAME]
RETURN
END
재미있는 부분은 삽입 문 바로 뒤에있는 쿼리와 반환 문 앞에 쿼리를 실행하면 초 단위로 작동한다는 것입니다.
내가 뭘 잘못하고 있다고 생각하니?
이
같은 모든 라인을 변경하는 것은 우리에게 실행 계획을 제시해주십시오. 나중에 참조 할 수 있도록 데이터베이스 성능에 대한 질문에 포함하고자하는 실행 계획을 작성하십시오. –