主题:关于数据库优化问题!!
描述;
1个存储过程,写得很麻烦,目的是为了提取过期的记录.即,
录入时间到当前时间-休息日-双休日-给定期限>0 则过期.
过期要从4个表中取关联数据.
当4个表中的记录总数达到1万以上时 运行超时!
请问如何修改sql语句才可以解决!
存储过程如下:
CREATE Procedure ApplyCase_GetExpireCaseList
AS
declare @CurrDate datetime
set @CurrDate = getDate()
SELECT a.ApplyCaseID,
a.CaseNO,
s.ServiceName,
a.CreateTime,
a.Status,
a.WindowID,
a.AcceptWay,
u.Name as UnitName,
a.DaiBan EmployeeName,
s.Flag,
convert(numeric(10,1),(datediff(dd,a.CreateTime,(case a.Status when 2 then a.FinishCaseDate else getdate() end))
-(select Count(FeriaDate) from feria where FeriaDate between a.CreateTime and @CurrDate) --去掉之间的所有节假日
-datediff(week,a.CreateTime, @CurrDate)*2--去掉所有的双休日
-(select AcceptTimeLimit from Services where Services.ServiceID = a.ServiceID))) as ExpireDay
FROM ApplyCases a INNER JOIN Services s ON a.ServiceID = s.ServiceID INNER JOIN Units u on u.UnitID=a.UnitID
where (a.AcceptWay=2 and a.Status in (1,2)) and --('办理中...','已办结')
(
datediff(dd,a.CreateTime,(case a.Status when 2 then a.CreateTime else getdate() end ))
-
(select Count(FeriaDate) from feria where FeriaDate between a.CreateTime and @CurrDate) --去掉之间的所有节假日
-
datediff(week,a.CreateTime, @CurrDate)*2--去掉所有的双休日
)
>= --超过承诺工作日天数的@alertArg倍数。
(
select AcceptTimeLimit from Services where Services.ServiceID = a.ServiceID
)
and isnull(a.IsDel,0) !=1 and s.Flag!=1
order by a.ApplyCaseID DESC
GO
1个存储过程,写得很麻烦,目的是为了提取过期的记录.即,
录入时间到当前时间-休息日-双休日-给定期限>0 则过期.
过期要从4个表中取关联数据.
当4个表中的记录总数达到1万以上时 运行超时!
请问如何修改sql语句才可以解决!
存储过程如下:
CREATE Procedure ApplyCase_GetExpireCaseList
AS
declare @CurrDate datetime
set @CurrDate = getDate()
SELECT a.ApplyCaseID,
a.CaseNO,
s.ServiceName,
a.CreateTime,
a.Status,
a.WindowID,
a.AcceptWay,
u.Name as UnitName,
a.DaiBan EmployeeName,
s.Flag,
convert(numeric(10,1),(datediff(dd,a.CreateTime,(case a.Status when 2 then a.FinishCaseDate else getdate() end))
-(select Count(FeriaDate) from feria where FeriaDate between a.CreateTime and @CurrDate) --去掉之间的所有节假日
-datediff(week,a.CreateTime, @CurrDate)*2--去掉所有的双休日
-(select AcceptTimeLimit from Services where Services.ServiceID = a.ServiceID))) as ExpireDay
FROM ApplyCases a INNER JOIN Services s ON a.ServiceID = s.ServiceID INNER JOIN Units u on u.UnitID=a.UnitID
where (a.AcceptWay=2 and a.Status in (1,2)) and --('办理中...','已办结')
(
datediff(dd,a.CreateTime,(case a.Status when 2 then a.CreateTime else getdate() end ))
-
(select Count(FeriaDate) from feria where FeriaDate between a.CreateTime and @CurrDate) --去掉之间的所有节假日
-
datediff(week,a.CreateTime, @CurrDate)*2--去掉所有的双休日
)
>= --超过承诺工作日天数的@alertArg倍数。
(
select AcceptTimeLimit from Services where Services.ServiceID = a.ServiceID
)
and isnull(a.IsDel,0) !=1 and s.Flag!=1
order by a.ApplyCaseID DESC
GO