22,209
社区成员
发帖
与我相关
我的任务
分享
select d.UID,y.KPIID,y.[Property],Val=sum(Val)
into #Val
from dbo.AVal_1 y
join dbo.Astat d on y.DateID=d.DateID
join dbo.AEmpDep e on d.UID=e.UID and (y.EID=e.EmpID or e.EmpID=0) and (y.DID=e.DepID or e.DepID=0)
group by d.UID,y.KPIID,y.[Property]
select d.UID,y.KPIID,y.[Property],Val=sum(Val)
into #Val
from dbo.AVal_1 y
join dbo.Astat d on 1=1
join dbo.AEmpDep e on d.UID=e.UID and (y.EID=e.EmpID or e.EmpID=0) and (y.DID=e.DepID or e.DepID=0)
group by d.UID,y.KPIID,y.[Property]
join dbo.Astat d on y.DateID=d.DateID
改写为
join dbo.Astat d on 1=1
就可以从19秒降低到3秒,在我测试的数据中,DateID只有一个值,因此,和1=1涉及到的数据完全相同,
忙了一个晚上,也没有更好的写法比较郁闷,事实上,动用索引,甚至聚簇索引,也没能改善CREATE PROC proc1
WITH RECOMPILE --加这里
AS
BEGIN
SET NOCOUNT ON
--
END
GO
再试下。
主要是因为数据分布不均匀和执行计划重用造成。