일련의 다른보기를 위해 작성한 일련의보기가 있습니다. 그들은 5k보다 적은 레코드를 반환하는 최종 뷰로 서로 빌드합니다. 이보기를 열면 실행하는 데 1 초도 채 걸리지 않습니다. WHERE collumn IS NOT NULL
을 추가하면 2 분 이상 걸립니다. 이 보고서는 매우 자주 실행해야 할 필요는 없지만 매주, 매일, 때로는 더 자주 실행해야하는 보고서가 있습니다.TSQL Query of View는 오랜 시간이 걸립니다.
내 솔루션은 뷰의 데이터에서 테이블을 만들고 쿼리하는 저장 프로 시저를 만드는 것입니다. 예약 된 보고서가 자동으로 실행되기 전에 실행되도록 저장 프로 시저를 설정합니다. 이 확인을 작동하지만 업데이트 된 보고서를 가져올 때마다 수동으로 저장 프로 시저를 실행해야합니다.
더 좋은 방법이 있습니까?
제출 된 주 재무를 찾으려면 [MW_Submitted_ROY]를보십시오. 이보기는 활동 테이블과 실행 기록 데이터를 정적 테이블에 결합합니다. 나는 정적 테이블의 데이터를 활성 테이블과 동일한 형식으로 마사지했다.
SELECT oe_po_no, cus_no, user_def_fld_1, user_def_fld_2, tot_sls_amt
FROM MW_Submitted_Weeks_OldMacola
WHERE MW_Submitted_Weeks_OldMacola.oe_po_no LIKE 'adv%'
UNION
SELECT oe_po_no, cus_no, user_def_fld_1, user_def_fld_2, tot_sls_amt
FROM oehdrhst_sql
WHERE oehdrhst_sql.oe_po_no LIKE 'adv%'
[MW_Company_Weeks]를 보면 현재 및 전년도에 재무를 제출할 수있는 가능한 모든 주를 생성 할 수 있습니다.
SELECT MW.MW_Weeks.Year, MW.MW_Weeks.Week, MW.MW_CompanyCodes.cmp_code
FROM MW.MW_Weeks CROSS JOIN
MW.MW_CompanyCodes
WHERE (MW.MW_Weeks.WEDate <= GETDATE()) AND (MW.MW_Weeks.Year > YEAR(GETDATE()) - 2)
내가보고
주이없는 저를 보여 최종보기 [MW_Missing_Weeks] 우리에게 가져다SELECT dbo.cicmpy.textfield2 AS [Group], dbo.cicmpy.cmp_code, dbo.cicmpy.cmp_name, dbo.cicmpy.cmp_fadd3 AS Owner, dbo.cicmpy.SalesPersonNumber,
MW.MW_Submitted_ROY.user_def_fld_1 AS Year, MW.MW_Submitted_ROY.user_def_fld_2 AS Week, MW.MW_Submitted_ROY.oe_po_no AS Description,
MW.MW_Submitted_ROY.tot_sls_amt
FROM dbo.cicmpy INNER JOIN
MW.MW_Submitted_ROY ON dbo.cicmpy.cmp_code = MW.MW_Submitted_ROY.cus_no
WHERE (dbo.cicmpy.cmp_code LIKE 'C%') AND (dbo.cicmpy.cmp_status = 'a') AND (dbo.cicmpy.cmp_type = 'C')
를 생성해야 회사 및 가치에 대해 더 많은 정보를 결합하여 [MW_Submitted_Weeks_By_RBC_ROY]보기 가 지난 회계 연도에 제출되었습니다. 여기서 'null이 아님'을 추가하면 영원히 걸릴 수 있습니다. SSMS에서
SELECT MW.MW_Company_Weeks.Year, MW.MW_Company_Weeks.Week, MW.MW_Company_Weeks.cmp_code, bPrev.tot_sls_amt, bPrev.[Group], bPrev.cmp_name, bPrev.Owner,
bPrev.SalesPersonNumber, bPrev.Description
FROM MW.MW_Company_Weeks LEFT OUTER JOIN
MW.MW_Submitted_Weeks_By_RBC_ROY ON MW.MW_Company_Weeks.cmp_code = MW.MW_Submitted_Weeks_By_RBC_ROY.cmp_code AND
MW.MW_Company_Weeks.Year = MW.MW_Submitted_Weeks_By_RBC_ROY.Year AND MW.MW_Company_Weeks.Week = MW.MW_Submitted_Weeks_By_RBC_ROY.Week LEFT OUTER JOIN
MW.MW_Submitted_Weeks_By_RBC_ROY AS bPrev ON MW.MW_Company_Weeks.cmp_code = bPrev.cmp_code AND MW.MW_Company_Weeks.Year = bPrev.Year + 1 AND
MW.MW_Company_Weeks.Week = bPrev.Week
WHERE (MW.MW_Submitted_Weeks_By_RBC_ROY.cmp_code IS NULL) AND bPrev.tot_sls_amt IS NOT NULL
http://technet.microsoft.com/ko-kr/library/dd171921(v=sql.100).aspx – seekerOfKnowledge
테이블 구조, 인덱스 등에 대해 자세히 알지 못해서 특정 권장 사항을 만드는 것이 정말 어렵습니다. 실행 계획을 살펴보고 속도 저하가 어디에서 발생하는지 확인하고, 인덱스가없는 경우 인덱스가 도움이 될 수있는 곳을 확인하십시오. "..not null"과 같은 소리는 일을 늦추는 큰 테이블 스캔을 유도합니다. –
@DavidW 이것들은 이전에 결코 혼란스러워하지 않은 것들입니다. 실행 계획 XML을 포함 시키시겠습니까? 꽤 큽니다. – d90