Search code examples
sqloraclequery-optimization

Optimizing Oracle SQL


I Need to optimize my query it takes 36 sec to process it . Pls help me out. This is my query in oracle

Select  unique api_WEEKLY.country 
From api_WEEKLY INNER 
JOIN USERPROFILE ON api_WEEKLY.REGION  = NVL(USERPROFILE.REGION,api_WEEKLY.REGION) 
AND api_WEEKLY.Category = NVL(USERPROFILE.SECTOR,api_WEEKLY.Category) 
AND api_WEEKLY.MRP_DRP_CONTROLLER  = NVL(USERPROFILE.MRP_DRP_CONTROLLER,api_WEEKLY.MRP_DRP_CONTROLLER) 
AND api_WEEKLY.TDC_VAL = NVL(USERPROFILE.TDC_VAL,api_WEEKLY.TDC_VAL) 
AND api_WEEKLY.PLANT  = NVL(USERPROFILE.PLANT,api_WEEKLY.PLANT) 
AND api_WEEKLY.MATERIAL = NVL(USERPROFILE.MATERIAL,api_WEEKLY.MATERIAL) 
AND api_WEEKLY.SUBSECTOR  = NVL(USERPROFILE.SUBSECTOR,api_WEEKLY.SUBSECTOR) 
AND api_WEEKLY.COUNTRY = NVL(USERPROFILE.COUNTRY,api_WEEKLY.COUNTRY) 
WHERE USERPROFILE.USER_ID = 'sheikh.a' ;

and

This is my USERPROFILE table


Solution

  • To replace the NVL functions you can try:

    From api_WEEKLY a
         INNER JOIN
         USERPROFILE u
         ON  ( u.REGION IS NULL OR a.REGION = u.REGION ) 
         AND ( u.SECTOR IS NULL OR a.Category = u.SECTOR )
    
         ... 
    
    WHERE u.USER_ID = 'sheikh.a'