-2
私はこの出力で最適化SQLクエリ
--create view [dbo].[vw_trnSchemeActivityExecutionStatus]
--as
select
mstSchemeID, mstSchemeName, mstSchemeNFOStartDate, mstSchemeNFOClosureDate,
mstSchemeAllotmentDate, mstSchemeIsActive,mstSchemeNFOType, mstSchemeIsWoundOff,
mstSchemeCompletedActivity, mstschemeCreatedOn,
Completed, Pending, PendingToday, PendingDueDate, FutureActivity,
(PendingDueDate + PendingToday + FutureActivity + Completed) as Total
from
(select
sum(case when ActivityExecutionDueDate <> ''
and convert(varchar(10), ActivityExecutionDueDate, 112) < convert(varchar(10), GETDATE(), 112)
and (isnull(trnActivityExecutionDate, '') = '' or trnActivityExecutionStatus= 'P')
then 1
else 0
end) as PendingDueDate,
sum(case when ActivityExecutionDueDate <> ''
and convert(varchar(10), ActivityExecutionDueDate, 112) > convert(varchar(10), GETDATE(), 112)
and isnull(trnActivityExecutionDate, '') = ''
then 1
else 0
end) as FutureActivity,
sum(case when ActivityExecutionDueDate <> ''
and isnull(trnActivityExecutionDate, '') = ''
and convert(varchar(10), ActivityExecutionDueDate, 112) = convert(varchar(10), getdate(), 112)
then 1
else 0
end) as PendingToday,
sum(case when ActivityExecutionDueDate <> ''
and isnull(trnActivityExecutionDate, '') = ''
then 1
else 0
end) as Pending,
sum(case when ActivityExecutionDueDate <> ''
and trnActivityExecutionDate <> ''
and trnActivityExecutionStatus = 'C'
then 1
else 0
end) as Completed,
mstSchemeID, mstSchemeName, mstSchemeNFOStartDate, mstSchemeNFOClosureDate,
mstSchemeAllotmentDate, mstSchemeIsActive, mstSchemeNFOType,
mstSchemeIsWoundOff, mstSchemeCompletedActivity, mstschemeCreatedOn
from
vw_trnSchemeActivityExecution
where
ActivityCheckListItemIsActive = 1 and mstSchemeIsActive = 1
group by
mstSchemeID, mstSchemeName, mstSchemeNFOStartDate, mstSchemeNFOClosureDate,
mstSchemeAllotmentDate, mstSchemeIsActive, mstSchemeNFOType, mstSchemeIsWoundOff,
mstSchemeCompletedActivity, mstschemeCreatedOn) b
を最適化するための2つのビューを持っては1時40分で54行として来ます。
そして、上記のビューで使用される2番目のビューは次のようになります。このビューで
--CREATE VIEW [dbo].[vw_trnSchemeActivityExecution]
--AS
select mstSchemeID,mstSchemeName,mstSchemeNFOStartDate,mstSchemeNFOClosureDate,mstSchemeAllotmentDate,
mstSchemeIsActive, mstSchemeIsWoundOff, mstSchemeCompletedActivity, mstSchemeNFOType,mstSchemeCreatedOn,
ActivityExecutionID,ActivityExecutionName, ActivityCheckListItemIsActive,ActivityCheckListItemDocumentTemplateID
,ActivityCheckListItemDocumentAttachmentRequired,ActivityCheckListItemEmailGroupID, ActivityCheckListItemEmailTemplateID,
ActivityCheckListItemNatureofActivity ,ActivityExecutionDueDate,ActivityCheckListItemAllowExternalDocument,
t.trnActivityExecutionID,t.trnActivityExecutionSchemeID,t.trnActivityExecutionDate,
t.trnActivityExecutionStatus,t.trnActivityExecutionCreatedBy,
t.trnActivityExecutionDueDate, t.trnSchemeActivityExecutionID, t.trnActivityExecutionRemark,
CASE WHEN cnt > 0 THEN 1 ELSE 0 END AS 'IsDocumentAttached'
from
(select
s.mstSchemeID, s.mstSchemeName,
s.mstSchemeNFOStartDate,
s. mstSchemeNFOClosureDate,
s.mstSchemeAllotmentDate,
s.mstSchemeIsActive,
s.mstSchemeIsWoundOff,
s.mstSchemeCompletedActivity,
s.mstSchemeNFOType,
s.mstSchemeCreatedOn,
a.ActivityCheckListItemID as [ActivityExecutionID],
a.ActivityCheckListItemName as [ActivityExecutionName],
a.ActivityCheckListItemIsActive,
a.ActivityCheckListItemDocumentTemplateID,
a.ActivityCheckListItemDocumentAttachmentRequired,
a.ActivityCheckListItemEmailGroupID,
a.ActivityCheckListItemEmailTemplateID,
a.ActivityCheckListItemNatureofActivity,
a.ActivityCheckListItemTimelineOn,
a.ActivityCheckListItemTimelineOperator,
a.ActivityCheckListItemTimelineDays,
a.ActivityCheckListItemAllowExternalDocument,
case
when ActivityCheckListItemTimelineOn = 'S' and ActivityCheckListItemTimelineOperator = '1'
then (select dbo.fnGetNextPreviousWorkingDay(s.mstSchemeNFOStartDate,a.ActivityCheckListItemTimelineDays))
when ActivityCheckListItemTimelineOn = 'S' and ActivityCheckListItemTimelineOperator = '0'
then (select dbo.fnGetNextPreviousWorkingDay(s.mstSchemeNFOStartDate,-a.ActivityCheckListItemTimelineDays))
when ActivityCheckListItemTimelineOn = 'C' and ActivityCheckListItemTimelineOperator = '1'
then (select dbo.fnGetNextPreviousWorkingDay(s.mstSchemeNFOClosureDate,a.ActivityCheckListItemTimelineDays))
when ActivityCheckListItemTimelineOn = 'C' and ActivityCheckListItemTimelineOperator = '0'
then (select dbo.fnGetNextPreviousWorkingDay(s.mstSchemeNFOClosureDate,-a.ActivityCheckListItemTimelineDays))
when ActivityCheckListItemTimelineOn = 'A' and ActivityCheckListItemTimelineOperator = '1'
then (select dbo.fnGetNextPreviousWorkingDay(s.mstSchemeAllotmentDate,a.ActivityCheckListItemTimelineDays))
when ActivityCheckListItemTimelineOn = 'A' and ActivityCheckListItemTimelineOperator = '0'
then (select dbo.fnGetNextPreviousWorkingDay(s.mstSchemeAllotmentDate,-a.ActivityCheckListItemTimelineDays))
end as [ActivityExecutionDueDate]
from vw_mstScheme s cross join
mstActivityCheckListItems a where a.ActivityCheckListItemIsActive = 1 and s.mstSchemeNFOType='C') m --s.mstSchemeIsActive = 1 and
left join trnSchemeActivityExecution t on t.trnActivityExecutionSchemeID = m.mstSchemeID and
t.trnActivityExecutionID = m.ActivityExecutionID
LEFT JOIN (
SELECT mstActivityID,count(TemplateID) as cnt FROM dbo.mstActivityItemDocuments a
inner join mstTemplates t on t.TemplateID = a.mstDocumentID and (t.TemplateType = 'D' or t.TemplateType = 'B')
GROUP BY mstActivityID
)cte1 ON m.ActivityExecutionID= cte1.mstActivityID
9500行
誰もがこのクエリに
詳細を提供するまで誰でもあなたを助けることはできません。あなたはやや低いレベルを開始し、最初に 'vw_mstScheme'レベルで何が起こるかを調べるべきですか?次に、次のレベルでビューを最適化しようとする場合があります。 とにかく、ここで使用している構造体(テーブル、インデックスなど)についての情報を提供する必要があります。 –
SSMSの実行計画と欠落しているインデックスのヒントを使用します。このように、問題はあまりにも広範であり、答えることができません。 –