Sql 突然查询执行缓慢

Sql 突然查询执行缓慢,sql,sql-server,Sql,Sql Server,我有非常典型的情况,我做错了。我有一个查询,一开始执行得很快,但后来执行起来却花了很多时间。。 我的问题是: Declare @fromdate varchar(20) = '01/01/2014', @todate varchar(20)= '27/05/2015', @SERVICE_ID CHAR(5) = '123' DECLARE @FDATE DATETIME ,

我有非常典型的情况,我做错了。我有一个查询,一开始执行得很快,但后来执行起来却花了很多时间。。 我的问题是:

Declare     
 @fromdate varchar(20) = '01/01/2014',         
 @todate varchar(20)= '27/05/2015',        
 @SERVICE_ID CHAR(5) = '123'                   


DECLARE  @FDATE DATETIME ,             
   @TDATE DATETIME   

SET @FDATE = (CONVERT(DATETIME,@fromdate,103))                
SET @TDATE = (CONVERT(DATETIME,@todate,103))   

IF OBJECT_ID('tempdb..#RUID') IS NOT NULL  

 DROP TABLE #RUID  

 CREATE TABLE #RUID(  
    OFFICEID INT,  
    OFFICE_TITTLE INT,  
    MAIN_OFFICE_TITTLE VARCHAR(50),  
    RLB_NAME VARCHAR(20),  
    DIST_NAME INT,  
    district_description VARCHAR(30))    

CREATE CLUSTERED INDEX IDX_C_RUID_ID ON #RUID(OFFICEID)  

CREATE NONCLUSTERED  INDEX IDX_RUID_Name ON #RUID(OFFICE_TITTLE,DIST_NAME)INCLUDE(district_description)  
INSERT INTO #RUID      
SELECT OFFICEID,  
       OFFICE_TITTLE,  
       MAIN_OFFICE_TITTLE,  
       RLB_NAME,  
       DIST_NAME,  
       D.district_description        
FROM  APSDC..DISTRICT D       
INNER JOIN cdma..Unified_RUID_WARD_MSTR I WITH(NOLOCK)    
 ON D.CDMA_DistrictID = I.DIST_NAME        
WHERE                 RLB_NAME in(3) AND I.STATEID ='01'   

select C.MAIN_OFFICE_TITTLE AS 'OFFICE_TITTLE',C.officeid, C.DIST_NAME AS DistrictName, C.district_description,               
ISNULL(count(I.ApplicationNumber),0) 'Total_Trans',                   
isnull(sum(case when Data_Available='Y' AND DataTampered = 'N' then 1 else 0 end),0) 'CategoryA'              
from #RUID c with(nolock)               
LEFT  JOIN Unified_BirthDeathAppDetails I WITH(NOLOCK) ON                
(C.OFFICE_TITTLE=I.RUID AND C.DIST_NAME=I.DistrictName)        
  AND I.Service_Type= '01' AND                
(DATEADD(DD,0,DATEDIFF(DD,0,I.Created_Date))) BETWEEN @FDATE AND @TDATE               
 AND NOT EXISTS(select application_number from reversal_details  WITH(NOLOCK)  WHERE ApplicationNumber <> i.ApplicationNumber AND service_id='123' )                                  
group by  C.MAIN_OFFICE_TITTLE,C.officeid, C.DIST_NAME,C.district_description                
order by C.district_description ,C.MAIN_OFFICE_TITTLE                             
我试过使用temp table和table变量,但它甚至没有显示任何结果集。但同样的查询只需2秒钟就可以执行,这需要花费很多时间。我已尝试更新此表上的Statstics,并已使用锁定进行了检查。我需要做的是,我已经遵循了其他每一项性能优化技术。

尝试:

Declare     
 @FDate Date = '01/01/2014',         
 @TDate Date= '27/05/2015',        
 @SERVICE_ID CHAR(5) = '123'                   


;WITH RUID
AS
(
   SELECT OFFICEID,  
          OFFICE_TITTLE,  
          MAIN_OFFICE_TITTLE,  
          RLB_NAME,  
          DIST_NAME,  
          D.district_description        
   FROM  APSDC..DISTRICT D       
   INNER JOIN cdma..Unified_RUID_WARD_MSTR I     
     ON D.CDMA_DistrictID = I.DIST_NAME        
   WHERE  RLB_NAME in(3) AND I.STATEID ='01'  
),
AppDetails
AS
(
   SELECT ApplicationNumber,                   
          CASE WHEN Data_Available='Y' AND DataTampered = 'N' 
             THEN 1 
             ELSE 0 
          END CategoryA
   FROM Unified_BirthDeathAppDetails I 
   WHERE I.CreateDate >= @FDate AND I.CreatedDate < @TDate AND
     NOT EXISTS
         (  select application_number 
            FROM reversal_details 
            WHERE I.Service_Type= '01' AND
                  ApplicationNumber <> i.ApplicationNumber AND
                  service_id= @Service_iD
         ) 
)
SELECT C.MAIN_OFFICE_TITTLE AS OFFICE_TITTLE
      ,C.officeid, C.DIST_NAME AS DistrictName
      , C.district_description
      ,ISNULL(count(I.ApplicationNumber),0) Total_Trans
      ,isnull(sum(CategoryA),0) CategoryA 
FROM RUID c                
LEFT  JOIN AppDetails I 
      ON C.OFFICE_TITTLE=I.RUID AND C.DIST_NAME=I.DistrictName
GROUP BY  C.MAIN_OFFICE_TITTLE
         ,C.officeid
         ,C.DIST_NAME
         ,C.district_description
ORDER BU C.district_description 
        ,C.MAIN_OFFICE_TITTLE     

确保在RLB_名称、StateId、CDMA_DistrictId、Dist_名称、CreatedDate等上有适当的索引。

将WHERE子句更改为…和CreatedDate>=FDate和CreatedDate