Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Need Query Optimization Tips for using UPPER function

515650Jul 13 2009 — edited Jul 13 2009
I would like to know if it would make any difference if I use UPPER function in WHERE clause as compared to using it in SELECT statement. For Example:
SELECT 
    2 AS ORDERID,
    'OFFC' AS RESULTTYPE,
    OFFC_CD AS GROUPCOL,
    SUM(FACE_AMT) AS TOT_FACE_AMT,
    SUM(PROJ_PREM_AMT) AS TOT_PROJ_PREM_AMT,
    COUNT(*) AS TOT_NUM_CASES,
    'YTD' AS RPTTYP
FROM
(
    SELECT
        FMI.ACCT_GRP_ID, FMI.GA_CD, FMI.OFFC_CD, FMI.GROUP_REALLOCATION, FMI.STAT_NAME
        ,CASE WHEN FMI.GROUP_REALLOCATION = 'Y' THEN
            SUM(NVL(FMI.FACE_AMT,0)) OVER (PARTITION BY FMI.ACCT_GRP_ID, FMI.AGNT_NAME, FMI.STAT_NAME, FMI.GROUP_REALLOCATION, FMI.LOB_NAME ORDER BY FMI.CA_CS_NUM DESC)
         ELSE
            NVL(FMI.FACE_AMT,0)
         END FACE_AMT
        ,CASE WHEN FMI.GROUP_REALLOCATION = 'Y' THEN
            SUM(NVL(FMI.PROJ_PREM_AMT,0)) OVER (PARTITION BY FMI.ACCT_GRP_ID, FMI.AGNT_NAME, FMI.STAT_NAME, FMI.GROUP_REALLOCATION, FMI.LOB_NAME ORDER BY FMI.CA_CS_NUM DESC) 
         ELSE
            NVL(FMI.PROJ_PREM_AMT,0)
         END PROJ_PREM_AMT    
        ,RANK() OVER (PARTITION BY FMI.ACCT_GRP_ID, FMI.AGNT_NAME, FMI.STAT_NAME, FMI.GROUP_REALLOCATION, FMI.LOB_NAME ORDER BY FMI.CA_CS_NUM) RANKING
    FROM
        IFV_FLD_MGMT_INFO FMI
        JOIN IFT_BAT_PARM BP
            ON  FMI.LST_STAT_DT >= (TO_DATE('01/01/' || TO_CHAR(TO_DATE(BP.PARM_DAT_VAL, 'YYYYMMDD'), 'YYYY'), 'MM/DD/YYYY'))
                AND BP.BAT_ID = 'CMISFLDMGMT_DT'
    WHERE   FMI.OFFC_CD IN (pOffcCd)
        AND FMI.SHOWINFMR = 'Y'
)
WHERE ((GROUP_REALLOCATION = 'Y' AND RANKING = 1) OR (GROUP_REALLOCATION = 'N'))
    AND UPPER(STAT_NAME) = 'PLACED'      
GROUP BY OFFC_CD
In the above code, will it make difference if I move UPPER function from WHERE clause to SELECT statement in the inner query as UPPER(FMI.STAT_NAME) STAT_NAME? Will there be any performance gain in long run?

Edited by: Kuul13 on Jul 13, 2009 12:25 PM
This post has been answered by Frank Kulash on Jul 13 2009
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 10 2009
Added on Jul 13 2009
6 comments
1,402 views