2011-09-26 5 views
0

SQL Server에서 시간 제한을 유지하는 쿼리가 있습니다. 쿼리에서 가장 큰 테이블은 단지 수백 개의 행을 가지고 있습니다. 기본적으로 나는 tblNovaPosts의 novaPost 필드와 함께 여러 테이블의 데이터를 일치시켜 보고서를 작성하려고합니다. 이 쿼리를보다 빠르게 실행하려면 어떻게 변경해야합니까?여러 조인을 사용하여이 쿼리를 최적화하십시오.

SELECT TOP (100) PERCENT tblNovaPosts.type, tblNovaPosts.novaPost, 
ISNULL(SUM(tblAuditTrail.amount), 0) AS FUNDING, 
ISNULL(SUM(tbl510.allot), 0) AS ALLOT, 
ISNULL(SUM(tblStanfin.oblig), 0) 
+ ISNULL(SUM(tblSof.obligationsCum), 0) 
+ ISNULL(SUM(tblSpecAppt.obligations), 0) 
+ ISNULL(SUM(tblJlens.obligationsCum), 0) 
- ISNULL(SUM(viewReimbObs.reimbObs), 0) AS OBLIGATED, 
ISNULL(SUM(tblSof.commitmentsNonCum), 0) 
+ ISNULL(SUM(tblRmt.commitment),0) 
+ ISNULL(SUM(tblReimb.commitmentsNonCum), 0) 
- ISNULL(SUM(viewReimbObs.reimbObs), 0) AS DIRCOMMIT 
FROM tblNovaPosts LEFT OUTER JOIN 
tblAuditTrail ON tblNovaPosts.novaPost = tblAuditTrail.novaPost LEFT OUTER JOIN 
tbl510 ON tblNovaPosts.novaPost = tbl510.novaPost LEFT OUTER JOIN 
tblStanfin ON tblNovaPosts.novaPost = tblStanfin.novaPost LEFT OUTER JOIN 
tblSof ON tblNovaPosts.novaPost = tblSof.novaPost LEFT OUTER JOIN 
tblSpecAppt ON tblNovaPosts.novaPost = tblSpecAppt.novaPost LEFT OUTER JOIN 
tblJlens ON tblNovaPosts.novaPost = tblJlens.novaPost LEFT OUTER JOIN 
viewReimbObs ON tblNovaPosts.novaPost = viewReimbObs.novaPost1 LEFT OUTER JOIN 
tblRmt on tblNovaPosts.novaPost = tblRmt.novaPost LEFT OUTER JOIN 
tblReimb ON tblNovaPosts.novaPost = tblReimb.novaPost 
GROUP BY tblNovaPosts.type, tblNovaPosts.novaPost 
ORDER BY tblNovaPosts.type, tblNovaPosts.novaPost 
+3

'TOP (100) PERCENT'은 아무런 의미가 없습니다 .. – Magnus

+0

@Conrad - [SQL Server 2000 이후로 작동하지 않음] –

+3

에 의해 기본 주문을 강제 실행하려고 할 때보기에 본 적이 있습니다. (http://blogs.msdn.com/b/queryoptteam/archive/2006/03/24/560396.aspx) –

답변

1

쿼리 계획을 봅니다. 때때로 SQL Server는 인덱스 권장 사항을 제공합니다.

클릭 버튼 :

execution plan

0

왼쪽 외부 조인 모두에 대해 의심스러운 뭔가가있다. 그것이 당신이 필요로하는 것이 확실합니까?

또한 tblAuditTrail이라는 테이블에 외부에서 가입하는 것으로 나타났습니다. 그것은 2 개의 테이블의 데카르트 곱을 생성 할 것 같습니다.

아마 당신은 당신이 실제로 열 gzillion 행 대신 당신이 기대했던 단지 몇 백을 요청하지 않음을 확인하기 위해 각각 개별적으로 가입 테스트해야합니다.

관련 문제