描述;
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