ahmed elbarbary

ahmed elbarbary

  • 637
  • 1.6k
  • 281.9k

why this query is very slow when add these 4 lines ?

Mar 18 2020 8:52 PM
the query is very slow i test it take too much time i realized that problem on these lines
  1. COUNT(CASE WHEN ISNULL(FI.FamilyLevel,0)= 0 AND PF.IntroductionDate IS NULL THEN p.PartID END ) Count_No_InTroudctionNULLForeCast ,  
  2.   
  3. COUNT(CASE WHEN ISNULL(FI.FamilyLevel,0)= 0 AND PF.IntroductionDate IS not NULL THEN p.PartID END ) Count_No_InTroudctionNotNULLForeCast ,  
  4.   
  5. COUNT(CASE WHEN ISNULL(FI.FamilyLevel,0)= 0 AND PF.IntroductionDate IS not NULL AND isnull(PF.Comment,''LIKE '%appro%' THEN PF.PartID END ) Count_No_InTroudctionNotNULLAPPForeCast ,  
  6.   
  7. COUNT(CASE WHEN ISNULL(FI.FamilyLevel,0)= 0 AND PF.IntroductionDate IS not NULL AND isnull(PF.Comment,''NOT LIKE '%appro%' THEN PF.PartID END ) Count_No_InTroudctionNotNULLNoAPPForeCast  
because all query take one 50 minutes
 
when i remove lines above query take 7 minutes
 
so how to solve this issue as block blow 
  1. SELECT F.CompanyID ,  
  2. COUNT(CASE WHEN FI.FamilyLevel= 1 THEN p.PartID END ) Count_Yes_InForeCast ,  
  3.   
  4. COUNT(CASE WHEN ISNULL(FI.FamilyLevel,0)= 0 THEN p.PartID END ) Count_No_InForeCast ,  
  5.   --------------- block have problem
  6. COUNT(CASE WHEN ISNULL(FI.FamilyLevel,0)= 0 AND PF.IntroductionDate IS NULL THEN p.PartID END ) Count_No_InTroudctionNULLForeCast ,  
  7.   
  8. COUNT(CASE WHEN ISNULL(FI.FamilyLevel,0)= 0 AND PF.IntroductionDate IS not NULL THEN p.PartID END ) Count_No_InTroudctionNotNULLForeCast ,  
  9.   
  10. COUNT(CASE WHEN ISNULL(FI.FamilyLevel,0)= 0 AND PF.IntroductionDate IS not NULL AND isnull(PF.Comment,''LIKE '%appro%' THEN PF.PartID END ) Count_No_InTroudctionNotNULLAPPForeCast ,  
  11.   
  12. COUNT(CASE WHEN ISNULL(FI.FamilyLevel,0)= 0 AND PF.IntroductionDate IS not NULL AND isnull(PF.Comment,''NOT LIKE '%appro%' THEN PF.PartID END ) Count_No_InTroudctionNotNULLNoAPPForeCast ,  
  13. --------------- end
  14. COUNT(DISTINCT CASE WHEN FI.FamilyLevel= 1 THEN FI.FamilyID END ) CountFamily_Yes_InForeCast ,  
  15. COUNT(DISTINCT CASE WHEN ISNULL(FI.FamilyLevel,0)= 0 THEN FI.FamilyID END ) CountFamily_No_InForeCast into #ForecastTotal  
  16.   
  17. FROM Parts.FamilyIntroductionDate FI WITH(NoLock) INNER JOIN parts.Nop_PartsFamily F ON F.PartFamilyID =fi.FamilyID  
  18.   
  19. INNER JOIN parts.Nop_Part P WITH(NoLock) ON p.PartsFamilyID=f.PartFamilyID  
  20. LEFT OUTER JOIN parts.PartsForecast PF WITH(NoLock) ON pf.PartID=p.PartID  
  21. GROUP BY F.CompanyID  
execution plan as below
https://www.brentozar.com/pastetheplan/?id=Hyss6rlLL 

Answers (4)