-2
SQL Server의 기존보기에서 작업하고 있습니다. 내 사용자가 성능이 너무 느리다 고보고했습니다. 어떤 사람은/제가 쿼리의 성능을 향상시킬 수있는 방법을 알아보기 주시기 바랍니다 수SQL Server 2012의 쿼리 성능 향상
검색어 :
Select FH.ForecastID
,FH.FiscalYear
,FH.FiscalMonth
,FH.ForecastStatusCode
,FH.ForecastStatusDescription
,WF.SubTypeID
,WF.CustomerCode
,WF.ProductID
,WF.EndCustomerName
,CU.RELShortName [Master Customer 1]
,CASE WHEN (WF.EndCustomerName <> '') THEN CASE WHEN (CST.[Shortname] IS NULL) THEN CU.ShortName ELSE CST.[Shortname] END ELSE CU.ShortName END AS CustomerShortName
,CASE WHEN (WF.EndCustomerName <> '') THEN CASE WHEN (CST.[Shortname] IS NULL) THEN CASE WHEN (CU.[CUSTOMER_CATEGORY] = 'ASU') THEN 'AU' ELSE 'GP' END ELSE CASE WHEN (CST.[CUSTOMER_CATEGORY] = 'ASU') THEN 'AU' ELSE 'GP' END END ELSE CASE WHEN (CU.[CUSTOMER_CATEGORY] = 'ASU') THEN 'AU' ELSE 'GP' END END AS CustomerCategory
, '' as CustomerShortName
,WF.EndCustomerName as [Disti End Customer]
,CU.CustomerName [Sold To Customer Name]
,WF.CustomerCode [Customer Sold To Number]
,CU.CustomerClass
,CASE WHEN (CU.CustomerClass <> 'Distributor') THEN CU.TerritoryCode ELSE WF.[Sales Office] END AS [Sales Office]
,FH.REA_Onshore [Off Shore On Shore]
,PR.ProductFamilyName [OSC Product Family(1)]
,PR.ProductClassName [OSC Product Family(2)]
,PR.ProductPartNumber
,FH.ForecastTypeID
,FH.ForecastTypeCode
,FH.ForecastTypeDescription as ForecastTypeDescription
,WF.SubType
, ISNULL(WF.CreatedDate , '') CreatedDate
, ISNULL(WF.ModifiedDate, '') ModifiedDate
,WF.ModifiedBy
,IsNull([MON-3], '0') [MON-3]
,IsNull([MON-2], '0') [MON-2]
,IsNull([MON-1], '0') [MON-1]
,IsNull([MON00], '0') [MON00]
,IsNull([MON01], '0') [MON01]
,IsNull([MON02], '0') [MON02]
,IsNull([MON03], '0') [MON03]
,IsNull([MON04], '0') [MON04]
,IsNull([MON05], '0') [MON05]
,IsNull([MON06], '0') [MON06]
,IsNull([MON07], '0') [MON07]
,IsNull([MON08], '0') [MON08]
,IsNull([MON09], '0') [MON09]
,IsNull([MON10], '0') [MON10]
,IsNull([MON11], '0') [MON11]
,IsNull([MON12], '0') [MON12]
,IsNull([MON13], '0') [MON13]
,IsNull([MON14], '0') [MON14]
from TRX_ForecastDetailFlattened WF
left Join (
SELECT ForecastID, FiscalYear, FiscalMonth, ForecastStatusCode, ForecastStatusDescription, FH.ForecastStatusID, REA_Onshore, FH.ForecastTypeID, FT.ForecastTypeCode, FT.ForecastTypeDescription
FROM PRF_ForecastHeader FH
inner Join LKP_ForecastStatus FS with (nolock) on FS.ForecastStatusID = FH.ForecastStatusID
inner Join LKP_ForecastType FT with (nolock) on FT.ForecastTypeID = FH.ForecastTypeID ) FH
on WF.ForecastID = FH.ForecastID
left Join (
select RELShortName, [ACTUAL_END_CUSTOMER_NAME],CustomerName, CustomerClass, TerritoryCode,CU.CustomerCode, ShortName ,[CUSTOMER_CATEGORY]
FROM LKP_Customer CU
left join (SELECT distinct [ACTUAL_END_CUSTOMER_NAME],[Shortname], [CUSTOMER_CATEGORY] FROM [REA_DS].[dbo].[LCUS_CUSTOMER_SHORTNAME]) CSTM on CSTM.[ACTUAL_END_CUSTOMER_NAME] COLLATE Latin1_General_CI_AI = CU.[RELShortName] COLLATE Latin1_General_CI_AI
left Join PRF_Territory TE with (nolock) on TE.TerritoryID = CU.TerritoryID
left Join LKP_TerritoryGroup TG with (nolock) on TG.TerritoryGroupID = TE.TerritoryGroupID and TG.TerritoryGroupName = 'SALES REP COMPANY') CU
on CU.CustomerCode = WF.CustomerCode
left Join (
select ProductID, ProductPartNumber, ProductFamilyName, ProductClassName
FROM LKP_Product PR with (nolock)
left Join LKP_ProductClass PC with (nolock) on PR.ProductClassID = PC.ProductClassID
left Join LKP_ProductFamily PF with (nolock) on PF.ProductFamilyID = PR.ProductFamilyID ) PR
on PR.ProductID = WF.ProductID
left join (SELECT distinct [ACTUAL_END_CUSTOMER_NAME],[Shortname],[CUSTOMER_CATEGORY] FROM [REA_DS].[dbo].[LCUS_CUSTOMER_SHORTNAME]) CST
on WF.EndCustomerName COLLATE Latin1_General_CI_AI = CST.[ACTUAL_END_CUSTOMER_NAME] COLLATE Latin1_General_CI_AI
Where CU.RELShortName <> '' and wf.CustomerCode <> '100000'
group by FH.ForecastID ,FH.FiscalYear ,FH.FiscalMonth ,FH.ForecastStatusCode ,FH.ForecastStatusDescription ,WF.SubTypeID ,WF.CustomerCode ,WF.ProductID
,WF.EndCustomerName ,CU.RELShortName ,WF.EndCustomerName ,CU.CustomerName ,WF.CustomerCode ,CU.CustomerClass ,FH.REA_Onshore ,PR.ProductFamilyName
,PR.ProductClassName ,PR.ProductPartNumber ,FH.ForecastTypeID ,FH.ForecastTypeCode ,FH.ForecastTypeDescription ,WF.SubType ,WF.ModifiedBy
,CST.[Shortname] ,CU.ShortName ,CST.[CUSTOMER_CATEGORY] ,CU.[CUSTOMER_CATEGORY] ,CU.TerritoryCode ,WF.[Sales Office] ,WF.CreatedDate ,WF.ModifiedDate
, [MON-3], [MON-2], [MON-1], [MON00], [MON01], [MON02], [MON03], [MON04],[MON05], [MON06], [MON07], [MON08], [MON09], [MON10], [MON11], [MON12], [MON13], [MON14]
스크린 샷 :
방법은 SQL을 보여 어때? ?? –
옵티마이 저가 인덱스를 생성하라고 말하고 있습니다 ... –
왜 투표를 많이했는지 모르겠지만 @TMcKeown에 나와 있듯이 옵티마이 저는 실제로 인덱스를 작성하라고 알려줍니다. 그 일이 어디서 진행되는지 확인하십시오. 현재의 질의 계획에서 볼 때, 대부분의 작업 *이 단지 몇 부분에서만 쓰이고있는 것처럼 보입니다. 그것들과 당신의 쿼리 성능에 초점이 맞춰질 것입니다. 또한 기본 테이블의 통계가 최신인지 확인하십시오. 각 테이블마다 UPDATE STATISTICS
답변
출처
2014-12-20 04:14:39 Vasily
관련 문제