我目前正在处理报告查询中的3分47秒执行时间。我真的很想在一分钟之内尝试执行。这个where子句占执行计划的66%。
这个Where子句在遵循执行计划之后是最明确的罪魁祸首。
在Where子句中使用这些类型的数据过滤器是不好的做法吗?如果是这样,我应该尝试将它与FROM子句中的内部联接语句结合起来以加快执行速度吗?
select txtPolicyNum
,Sum(CASE WHEN txtDebitCredit='d' THEN txtAmt*-1 ELSE txtAmt END) As Prem
into #prem
from proddw.dbo.miscGLHistory
where Left(txtAccountNum,1)='3'
Group by txtPolicyNum
Order by txtPolicyNum
SELECT
ad.txtAgentNum GAAgentNum,
AgentNum.txtAgentNum Agent_Num,
rtrim(AgentNum.txtPriFName)+ ' ' + rtrim(AgentNum.txtPriLName) as Agent_Name,
mainDim.txtFHMainNum as MainBranch,
fd.txtFHNum as FH_Num,
fd.txtPriName as FH_Name,
iv.txtPolNum as PolicyNum,
rtrim(oi.txtIndFirst)+' '+rtrim(oi.txtIndLast) As Insured_Name,
iv.txtProdType as Product,
Substring(iv.txtPlanCode,4,2)+' ' + Substring(iv.txtPlanCode,6,3) as Plan_At_Issue,
Convert(date,iv.datCycleDate,102) IssueDate,
CASE WHEN iv.intCount=0 THEN 'Rider'
WHEN iv.intCount=1 THEN 'NewIss'
ELSE 'Policy Adjustment' end as Type,
iv.decPaidPAP+iv.decPaidPAA AS Funeral_Amt,
iv.decProdVal AS Face,
CASE WHEN Substring(iv.txtPlanCode,6,3) = 'ROP' THEN p.Prem * 1.05
ELSE iv.decProdVal END as Current_Death_Benefit,
iv.intIssAge as Age,
rtrim(oe.txtIndFirst)+' '+rtrim(oe.txtIndLast) As Owner_Name
INTO #StepOne
FROM proddw.dbo.IssVal as iv
inner join proddw.dbo.AgentRef ar on iv.intAgentRefID = ar.intAgentRefID
inner join proddw.dbo.AgentDim AgentNum on ar.intAgentID = AgentNum.intAgentID
--Getting Agent NUM
inner join proddw.dbo.GARef agt on iv.intGARefID = agt.intGARefID
inner join proddw.dbo.AgentDim ad on agt.intAgentID=ad.intAgentID
--Getting GA NUM
--These Fields Are Populating Correctly
--Getting FH Num
inner join proddw.dbo.FHRef fr on iv.intFHRefID=fr.intFHRefID
inner join proddw.dbo.FHDim fd on fr.txtFHNum=fd.txtFHNum
--Getting FHMainNum
inner join proddw.dbo.FHMainRef rm on iv.intFHMainRefID=rm.intFHMainRefID
inner join proddw.dbo.FHDim mainDim on rm.txtFHMainNum=mainDim.txtFHMainNum
--Getting InsuredName
inner join proddw.dbo.InsRef ir on iv.intInsRefID=ir.intInsRefID
inner join proddw.dbo.OwnInsBeneDim oi on ir.intID=oi.intID
--Getting PolOwnerName
inner join proddw.dbo.OwnRef orw on iv.intPolOwnerRefID = orw.intOwnRefID
inner join proddw.dbo.OwnInsBeneDim oe on orw.intID = oe.intID
inner JOIN #Prem p on iv.txtPolNum=p.txtPolicyNum
WHERE
ad.txtAgentNum='2K884' -- AND r.txtRelateCode='in'
AND iv.intBenSeq > 0
and iv.txtBenType in ('BA', 'BF', 'OR')
AND (fr.datStartDate <= iv.datCycleDate AND fr.datStopDate >= iv.datCycleDate)
AND (rm.datStartDate <= iv.datCycleDate AND rm.datStopDate >= iv.datCycleDate)
AND (agt.datStartDate <= iv.datCycleDate AND agt.datStopDate >=iv.datCycleDate)
AND (ar.datStartDate <= iv.datCycleDate AND ar.datStopDate >= iv.datCycleDate)
AND (ir.datStartDate <= iv.datCycleDate AND ir.datStopDate >= iv.datCycleDate)
AND (orw.datStartDate <= iv.datCycleDate AND orw.datStopDate >= iv.datCycleDate)
GROUP BY
ad.txtAgentNum,
AgentNum.txtAgentNum,
rtrim(AgentNum.txtPriFName)+ ' ' + rtrim(AgentNum.txtPriLName),
mainDim.txtFHMainNum,
fd.txtFHNum,
fd.txtPriName ,
iv.txtPolNum,
rtrim(oi.txtIndFirst)+' '+rtrim(oi.txtIndLast),
iv.txtProdType,
Substring(iv.txtPlanCode,4,2)+' ' + Substring(iv.txtPlanCode,6,3),
rtrim(oe.txtIndFirst)+' '+rtrim(oe.txtIndLast),
iv.datCycleDate,
CASE WHEN iv.intCount=0 THEN 'SP Rider'
WHEN iv.intCount=1 THEN 'New Issue'
ELSE 'Policy Adjustment' end,
iv.intCount,
iv.intIssAge,
iv.decProdVal,
iv.decPaidPAP+iv.decPaidPAA,
CASE WHEN Substring(iv.txtPlanCode,6,3) = 'ROP' THEN p.Prem * 1.05
ELSE iv.decProdVal END
Select s.*
from #StepOne s
order by s.PolicyNum
enter code here