이 쿼리는 원래 ODBC를 통해 외부 데이터베이스에 연결된 MS Access 테이블에 액세스하는 VB6 프로그램에서 왔습니다. 그것은 실행하는 데 약 3:30 걸립니다.연결된 서버를 사용하는 SQL Server 2008에서 느린 쿼리. 나는 무엇을 볼 수 있는가?
이제 더 나은 데이터베이스 시스템으로 마이그레이션하는 방법을 평가할 수있는 SQL Server 2008 Express 상자를 설치했습니다. 그래서 외부 서버 (우리는 DWPROD라고 함)에 연결된 서버를 설치하고 쿼리를 변경 (iif 문을 대소 문자로 변경)하고 실행할 때 12 분 동안 실행하고 여전히 끝내지 않습니다. SQL Server를 처음 사용하기 때문에 오래 걸리는 부분을 보려면 어떻게해야합니까? 이 속도를 높이기위한 제안 사항이 있습니까? 권장되는 리소스가 있으므로이 정보를 자세히 알아볼 수 있습니까? 이것은 우리가 가지고있는 것과 비교되는 간단한 쿼리이므로이 문제를 다시 치게 될 것입니다.
쿼리 : 나는 오래 알고
SELECT [FISCAL_YEAR] AS FISCAL_YEAR,
[Budgets].[dbo].[Departments].strdepentity AS ENTITY_CODE,
[Budgets].[dbo].[Departments].depdiv1 AS DIVISION_CODE,
FINANCIAL_DEPTID AS DEPTID,
FUND_CODE,
[CLASS_FLD] AS CLASS_CODE,
[PROJECT_ID],
[PROGRAM_CODE],
[ACCOUNT] AS ACCOUNT_CODE,
CASE
WHEN [ACCOUNT] in ('500020','520000','520220','520240') THEN 2
WHEN LEFT([ACCOUNT],1)='5' THEN 1
WHEN Left([ACCOUNT],1)='6' THEN 3
WHEN Left([ACCOUNT],1)='7' THEN 4
WHEN Left([ACCOUNT],1)='8' THEN 5
ELSE 0
END AS ACCT_GRP_CODE,
Sum([BUDGET_AMOUNT]) AS GL_BUD_AMT,
Sum([ENCUMBRANCE_AMOUNT]) AS GL_ENC_AMT,
Sum([EXPENDITURE_AMOUNT]) AS GL_EXP_AMT,
CASE
WHEN Left([CLASS_FLD],2)='12' THEN 0
WHEN Left([CLASS_FLD],3)='113' THEN 3
WHEN Left([CLASS_FLD],3)='112' THEN 14
WHEN Left([CLASS_FLD],3)='115' THEN 10
WHEN Left([CLASS_FLD],3)='116' THEN 13
WHEN Left([CLASS_FLD],3)='117' THEN 12
WHEN Left([CLASS_FLD],3)='118' THEN 11
WHEN Left([CLASS_FLD],2)='13' THEN 2
WHEN Left([CLASS_FLD],2)='14' THEN 3
WHEN Left([CLASS_FLD],1)='4' THEN 4
WHEN Left([CLASS_FLD],1)='6' THEN 6
ELSE 9
END AS FUND_SOURCE
FROM [DWPROD]..[DISC].[PS_LEDGER_DETAIL] LEFT JOIN [Budgets].[dbo].[Departments] ON FINANCIAL_DEPTID=[Budgets].[dbo].[Departments].deporg
WHERE ((([BUDGET_PERIOD])='2010') And (([ACCOUNTING_PERIOD]) Between 1 And 12))
GROUP BY
[FISCAL_YEAR],
[Budgets].[dbo].[Departments].strdepentity, [Budgets].[dbo].[Departments].depdiv1,
[FINANCIAL_DEPTID],
FUND_CODE,
[CLASS_FLD],
[PROJECT_ID],
[PROGRAM_CODE],
[ACCOUNT],
CASE
WHEN [ACCOUNT] in ('500020','520000','520220','520240') THEN 2
WHEN LEFT([ACCOUNT],1)='5' THEN 1
WHEN Left([ACCOUNT],1)='6' THEN 3
WHEN Left([ACCOUNT],1)='7' THEN 4
WHEN Left([ACCOUNT],1)='8' THEN 5
ELSE 0
END,
CASE
WHEN Left([CLASS_FLD],2)='12' THEN 0
WHEN Left([CLASS_FLD],3)='113' THEN 3
WHEN Left([CLASS_FLD],3)='112' THEN 14
WHEN Left([CLASS_FLD],3)='115' THEN 10
WHEN Left([CLASS_FLD],3)='116' THEN 13
WHEN Left([CLASS_FLD],3)='117' THEN 12
WHEN Left([CLASS_FLD],3)='118' THEN 11
WHEN Left([CLASS_FLD],2)='13' THEN 2
WHEN Left([CLASS_FLD],2)='14' THEN 3
WHEN Left([CLASS_FLD],1)='4' THEN 4
WHEN Left([CLASS_FLD],1)='6' THEN 6
ELSE 9
END
HAVING (((FISCAL_YEAR)=2010)
AND ((FINANCIAL_DEPTID) Between '100' And '999')
AND ((ACCOUNT) Between '500000' And '899999'))
ORDER BY [FINANCIAL_DEPTID], [CLASS_FLD], [PROJECT_ID], [ACCOUNT]
. 보고 주셔서 감사합니다.
연결된 서버 DWPROD은 무엇입니까? 아직도 액세스? – MartW
DWPROD는 연결된 서버입니다. 이 쿼리에는 접근 테이블이 없습니다. dbo.Departments는 SQL Server의 테이블입니다. –