Home » SQL & PL/SQL » SQL & PL/SQL » sql performance (merged) (19c)
sql performance (merged) [message #690268] Tue, 11 February 2025 18:02 Go to next message
ora9a
Messages: 43
Registered: June 2010
Member
I have this update which takes a long time to run. Is there any improvements that can be made, particularly with all the AND/ORs. The staging table has about 30k records.

UPDATE
        STAGING STG
    SET
        (               STG.TITLE,
                        STG.FORENAME,
                        STG.MIDDLE_NAME,
                        STG.SURNAME,
                        STG.GENDER,
                        STG.DATE_OF_BIRTH,
                        STG.ADDRESS_LINE_1,
                        STG.ADDRESS_LINE_2,
                        STG.ADDRESS_LINE_3,
                        STG.ADDRESS_CITY,
                        STG.ADDRESS_COUNTY_CODE,
                        STG.ADDRESS_POST_CODE,
                        STG.ADDRESS_NATION_CODE,
                        STG.TT_ADDRESS_LINE_1,
                        STG.TT_ADDRESS_LINE_2,
                        STG.TT_ADDRESS_LINE_3,
                        STG.TT_ADDRESS_CITY,
                        STG.TT_ADDRESS_COUNTY_CODE,
                        STG.TT_ADDRESS_POST_CODE,
                        STG.TT_ADDRESS_NATION_CODE,
                        STG.TELEPHONE,
                        STG.MOBILE_TELEPHONE,
                        STG.EMAIL_ADDRESS,
                        STG.DOMICILE,
                        STG.NATIONALITY,
                        STG.ENTRY_TERM,
                        STG.RESIDENCY_CODE,
                        STG.COUNTRY_OF_BIRTH,
						STG.COURSE_KEY,
                        STG.COURSE_CODE,
                        STG.YEAR_OF_ENTRY,
                        STG.MONTH_OF_ENTRY,
                        STG.STATUS,
                        STG.APP_SOURCE,
                        STG.SSDT_CODE_ENTRY,
                        STG.DATE_EXTRACT
                        ) = (SELECT         TITLE,
                                            FORENAME,
                                            MIDDLE_NAME,
                                            SURNAME,
                                            GENDER,
                                            DATE_OF_BIRTH,
                                            ADDRESS_LINE_1,
                                            ADDRESS_LINE_2,
                                            ADDRESS_LINE_3,
                                            ADDRESS_CITY,
                                            ADDRESS_COUNTY_CODE,
                                            ADDRESS_POST_CODE,
                                            ADDRESS_NATION_CODE,
                                            TT_ADDRESS_LINE_1,
                                            TT_ADDRESS_LINE_2,
                                            TT_ADDRESS_LINE_3,
                                            TT_ADDRESS_CITY,
                                            TT_ADDRESS_COUNTY_CODE,
                                            TT_ADDRESS_POST_CODE,
                                            TT_ADDRESS_NATION_CODE,
                                            TELEPHONE,
                                            MOBILE_TELEPHONE,
                                            EMAIL_ADDRESS,
                                            DOMICILE,
                                            NATIONALITY,
                                            ENTRY_TERM,
                                            RESIDENCY_CODE,
                                            COUNTRY_OF_BIRTH,
					  COURSE_KEY,
                                            COURSE_CODE,
                                            YEAR_OF_ENTRY,
                                            MONTH_OF_ENTRY,
                                            3,
                                            APP_SOURCE,
                                            SSDT_CODE_ENTRY,
                                            SYSDATE
                                            FROM
                                                TEMPSTAGING
                                            WHERE
                                            (STG.APPLICANT_NO = APPLICANT_NO AND
                                             STG.CHOICE_TYPE = CHOICE_TYPE AND
                                             STG.CHOICE_TYPE_NO = CHOICE_TYPE_NO AND
					     STG.pidm = pidm)
                                            AND
                                            (
                                                (
                                                STG.TITLE <> TITLE
                                                OR
                                                (STG.TITLE is null and TITLE is not Null)
                                                OR
                                                (STG.TITLE is not null and TITLE is Null)
                                                 )
                                            OR
                                                (
                                                STG.FORENAME <> FORENAME
                                                OR
                                                (STG.FORENAME is null and FORENAME is not Null)
                                                OR
                                                (STG.FORENAME is not null and FORENAME is Null)
                                                 )
                                            OR
                                                (
                                                STG.MIDDLE_NAME <> MIDDLE_NAME
                                                OR
                                                (STG.MIDDLE_NAME is null and MIDDLE_NAME is not Null)
                                                OR
                                                (STG.MIDDLE_NAME is not null and MIDDLE_NAME is Null)
                                                 )
                                            OR
                                                (
                                                STG.SURNAME <> SURNAME
                                                OR
                                                (STG.SURNAME is null and SURNAME is not Null)
                                                OR
                                                (STG.SURNAME is not null and SURNAME is Null)
                                                 )
                                            OR
                                                (
                                                STG.GENDER <> GENDER
                                                OR
                                                (STG.GENDER is null and GENDER is not Null)
                                                OR
                                                (STG.GENDER is not null and GENDER is Null)
                                                 )
                                            OR
                                                (
                                                STG.DATE_OF_BIRTH <> DATE_OF_BIRTH
                                                OR
                                                (STG.DATE_OF_BIRTH is null and DATE_OF_BIRTH is not Null)
                                                OR
                                                (STG.DATE_OF_BIRTH is not null and DATE_OF_BIRTH is Null)
                                                 )
                                            OR
                                                (
                                                STG.ADDRESS_LINE_1 <> ADDRESS_LINE_1
                                                OR
                                                (STG.ADDRESS_LINE_1 is null and ADDRESS_LINE_1 is not Null)
                                                OR
                                                (STG.ADDRESS_LINE_1 is not null and ADDRESS_LINE_1 is Null)
                                                 )
                                            OR
                                                (
                                                STG.ADDRESS_LINE_2 <> ADDRESS_LINE_2
                                                OR
                                                (STG.ADDRESS_LINE_2 is null and ADDRESS_LINE_2 is not Null)
                                                OR
                                                (STG.ADDRESS_LINE_2 is not null and ADDRESS_LINE_2 is Null)
                                                 )
                                            OR
                                                (
                                                STG.ADDRESS_LINE_3 <> ADDRESS_LINE_3
                                                OR
                                                (STG.ADDRESS_LINE_3 is null and ADDRESS_LINE_3 is not Null)
                                                OR
                                                (STG.ADDRESS_LINE_3 is not null and ADDRESS_LINE_3 is Null)
                                                 )
                                            OR
                                                (
                                                STG.ADDRESS_CITY <> ADDRESS_CITY
                                                OR
                                                (STG.ADDRESS_CITY is null and ADDRESS_CITY is not Null)
                                                OR
                                                (STG.ADDRESS_CITY is not null and ADDRESS_CITY is Null)
                                                 )
                                            OR
                                                (
                                                STG.ADDRESS_COUNTY_CODE <> ADDRESS_COUNTY_CODE
                                                OR
                                                (STG.ADDRESS_COUNTY_CODE is null and ADDRESS_COUNTY_CODE is not Null)
                                                OR
                                                (STG.ADDRESS_COUNTY_CODE is not null and ADDRESS_COUNTY_CODE is Null)
                                                 )
                                            OR
                                                (
                                                STG.ADDRESS_POST_CODE <> ADDRESS_POST_CODE
                                                OR
                                                (STG.ADDRESS_POST_CODE is null and ADDRESS_POST_CODE is not Null)
                                                OR
                                                (STG.ADDRESS_POST_CODE is not null and ADDRESS_POST_CODE is Null)
                                                 )
                                            OR
                                                (
                                                STG.ADDRESS_NATION_CODE <> ADDRESS_NATION_CODE
                                                OR
                                                (STG.ADDRESS_NATION_CODE is null and ADDRESS_NATION_CODE is not Null)
                                                OR
                                                (STG.ADDRESS_NATION_CODE is not null and ADDRESS_NATION_CODE is Null)
                                                 )
                                            OR
                                                (
                                                STG.TELEPHONE <> TELEPHONE
                                                OR
                                                (STG.TELEPHONE is null and TELEPHONE is not Null)
                                                OR
                                                (STG.TELEPHONE is not null and TELEPHONE is Null)
                                                 )
                                            OR
                                                (
                                                STG.MOBILE_TELEPHONE <> MOBILE_TELEPHONE
                                                OR
                                                (STG.MOBILE_TELEPHONE is null and MOBILE_TELEPHONE is not Null)
                                                OR
                                                (STG.MOBILE_TELEPHONE is not null and MOBILE_TELEPHONE is Null)
                                                 )
                                            OR
                                                (
                                                STG.EMAIL_ADDRESS <> EMAIL_ADDRESS
                                                OR
                                                (STG.EMAIL_ADDRESS is null and EMAIL_ADDRESS is not Null)
                                                OR
                                                (STG.EMAIL_ADDRESS is not null and EMAIL_ADDRESS is Null)
                                                 )
                                            OR
                                                (
                                                STG.DOMICILE <> DOMICILE
                                                OR
                                                (STG.DOMICILE is null and DOMICILE is not Null)
                                                OR
                                                (STG.DOMICILE is not null and DOMICILE is Null)
                                                 )
                                            OR
                                                (
                                                STG.NATIONALITY <> NATIONALITY
                                                OR
                                                (STG.NATIONALITY is null and NATIONALITY is not Null)
                                                OR
                                                (STG.NATIONALITY is not null and NATIONALITY is Null)
                                                 )
                                            OR
                                                (
                                                STG.COUNTRY_OF_BIRTH <> COUNTRY_OF_BIRTH
                                                OR
                                                (STG.COUNTRY_OF_BIRTH is null and COUNTRY_OF_BIRTH is not Null)
                                                OR
                                                (STG.COUNTRY_OF_BIRTH is not null and COUNTRY_OF_BIRTH is Null)
                                                 )
                                            )
                                            AND
                                            (
                                                (
                                                STG.TT_ADDRESS_LINE_1 <> TT_ADDRESS_LINE_1
                                                OR
                                                (STG.TT_ADDRESS_LINE_1 is null and TT_ADDRESS_LINE_1 is not Null)
                                                OR
                                                (STG.TT_ADDRESS_LINE_1 is not null and TT_ADDRESS_LINE_1 is Null)
                                                 )
                                            OR
                                                (
                                                STG.TT_ADDRESS_LINE_2 <> TT_ADDRESS_LINE_2
                                                OR
                                                (STG.TT_ADDRESS_LINE_2 is null and TT_ADDRESS_LINE_2 is not Null)
                                                OR
                                                (STG.TT_ADDRESS_LINE_2 is not null and TT_ADDRESS_LINE_2 is Null)
                                                 )
                                             OR
                                                (
                                                STG.TT_ADDRESS_LINE_3 <> TT_ADDRESS_LINE_3
                                                OR
                                                (STG.TT_ADDRESS_LINE_3 is null and TT_ADDRESS_LINE_3 is not Null)
                                                OR
                                                (STG.TT_ADDRESS_LINE_3 is not null and TT_ADDRESS_LINE_3 is Null)
                                                 )
                                             OR
                                             (
                                                STG.TT_ADDRESS_CITY <> TT_ADDRESS_CITY
                                                OR
                                                (STG.TT_ADDRESS_CITY is null and TT_ADDRESS_CITY is not Null)
                                                OR
                                                (STG.TT_ADDRESS_CITY is not null and TT_ADDRESS_CITY is Null)
                                                 )
                                             OR
                                             (
                                                STG.TT_ADDRESS_COUNTY_CODE <> TT_ADDRESS_COUNTY_CODE
                                                OR
                                                (STG.TT_ADDRESS_COUNTY_CODE is null and TT_ADDRESS_COUNTY_CODE is not Null)
                                                OR
                                                (STG.TT_ADDRESS_COUNTY_CODE is not null and TT_ADDRESS_COUNTY_CODE is Null)
                                                 )
                                             OR
                                             (
                                                STG.TT_ADDRESS_POST_CODE <> TT_ADDRESS_POST_CODE
                                                OR
                                                (STG.TT_ADDRESS_POST_CODE is null and TT_ADDRESS_POST_CODE is not Null)
                                                OR
                                                (STG.TT_ADDRESS_POST_CODE is not null and TT_ADDRESS_POST_CODE is Null)
                                                 )
                                             OR
                                             (
                                                STG.TT_ADDRESS_NATION_CODE <> TT_ADDRESS_NATION_CODE
                                                OR
                                                (STG.TT_ADDRESS_NATION_CODE is null and TT_ADDRESS_NATION_CODE is not Null)
                                                OR
                                                (STG.TT_ADDRESS_NATION_CODE is not null and TT_ADDRESS_NATION_CODE is Null)
                                              )
                                            )
                                            AND
                                            (
                                                (
                                                    STG.ENTRY_TERM <> ENTRY_TERM
                                                    OR
                                                    (STG.ENTRY_TERM is null and ENTRY_TERM is not Null)
                                                    OR
                                                    (STG.ENTRY_TERM is not null and ENTRY_TERM is Null)
                                                 )
                                             OR
                                             (
                                                    STG.RESIDENCY_CODE <> RESIDENCY_CODE
                                                    OR
                                                    (STG.RESIDENCY_CODE is null and RESIDENCY_CODE is not Null)
                                                    OR
                                                    (STG.RESIDENCY_CODE is not null and RESIDENCY_CODE is Null)
                                                 )
                                             OR
                                             (
                                                    STG.COURSE_CODE <> COURSE_CODE
                                                    OR
                                                    (STG.COURSE_CODE is null and COURSE_CODE is not Null)
                                                    OR
                                                    (STG.COURSE_CODE is not null and COURSE_CODE is Null)
                                                 )
                                             OR
                                             (
                                                    STG.COURSE_KEY <> COURSE_KEY
                                                    OR
                                                    (STG.COURSE_KEY is null and COURSE_KEY is not Null)
                                                    OR
                                                    (STG.COURSE_KEY is not null and COURSE_KEY is Null)
                                                 )
                                             OR
                                             (
                                                    STG.YEAR_OF_ENTRY <> YEAR_OF_ENTRY
                                                    OR
                                                    (STG.YEAR_OF_ENTRY is null and YEAR_OF_ENTRY is not Null)
                                                    OR
                                                    (STG.YEAR_OF_ENTRY is not null and YEAR_OF_ENTRY is Null)
                                                 )
                                             OR
                                             (
                                                    STG.MONTH_OF_ENTRY <> MONTH_OF_ENTRY
                                                    OR
                                                    (STG.MONTH_OF_ENTRY is null and MONTH_OF_ENTRY is not Null)
                                                    OR
                                                    (STG.MONTH_OF_ENTRY is not null and MONTH_OF_ENTRY is Null)
                                                 )
                                             OR
                                             (
                                                    STG.SSDT_CODE_ENTRY <> SSDT_CODE_ENTRY
                                                    OR
                                                    (STG.SSDT_CODE_ENTRY is null and SSDT_CODE_ENTRY is not Null)
                                                    OR
                                                    (STG.SSDT_CODE_ENTRY is not null and SSDT_CODE_ENTRY is Null)
                                                 )
                                            )
                                            )
    WHERE
        (STG.PIDM, STG.APPLICANT_NO, STG.CHOICE_TYPE, STG.CHOICE_TYPE_NO) IN
                                                                            (SELECT PIDM, APPLICANT_NO, CHOICE_TYPE, CHOICE_TYPE_NO
                                                                             FROM
                                                                             SALFORD.UCASTEMPSTAGING
                                                                             WHERE
                                                                             (STG.APPLICANT_NO = APPLICANT_NO AND
									      STG.CHOICE_TYPE = CHOICE_TYPE AND
									      STG.CHOICE_TYPE_NO = CHOICE_TYPE_NO AND
									      STG.pidm = pidm
                                                                             )
                                                                            AND
                                                                                (
                                                                                    (
                                                                                    STG.TITLE <> TITLE
                                                                                    OR
                                                                                    (STG.TITLE is null and TITLE is not Null)
                                                                                    OR
                                                                                    (STG.TITLE is not null and TITLE is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.FORENAME <> FORENAME
                                                                                    OR
                                                                                    (STG.FORENAME is null and FORENAME is not Null)
                                                                                    OR
                                                                                    (STG.FORENAME is not null and FORENAME is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.MIDDLE_NAME <> MIDDLE_NAME
                                                                                    OR
                                                                                    (STG.MIDDLE_NAME is null and MIDDLE_NAME is not Null)
                                                                                    OR
                                                                                    (STG.MIDDLE_NAME is not null and MIDDLE_NAME is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.SURNAME <> SURNAME
                                                                                    OR
                                                                                    (STG.SURNAME is null and SURNAME is not Null)
                                                                                    OR
                                                                                    (STG.SURNAME is not null and SURNAME is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.GENDER <> GENDER
                                                                                    OR
                                                                                    (STG.GENDER is null and GENDER is not Null)
                                                                                    OR
                                                                                    (STG.GENDER is not null and GENDER is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.DATE_OF_BIRTH <> DATE_OF_BIRTH
                                                                                    OR
                                                                                    (STG.DATE_OF_BIRTH is null and DATE_OF_BIRTH is not Null)
                                                                                    OR
                                                                                    (STG.DATE_OF_BIRTH is not null and DATE_OF_BIRTH is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.ADDRESS_LINE_1 <> ADDRESS_LINE_1
                                                                                    OR
                                                                                    (STG.ADDRESS_LINE_1 is null and ADDRESS_LINE_1 is not Null)
                                                                                    OR
                                                                                    (STG.ADDRESS_LINE_1 is not null and ADDRESS_LINE_1 is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.ADDRESS_LINE_2 <> ADDRESS_LINE_2
                                                                                    OR
                                                                                    (STG.ADDRESS_LINE_2 is null and ADDRESS_LINE_2 is not Null)
                                                                                    OR
                                                                                    (STG.ADDRESS_LINE_2 is not null and ADDRESS_LINE_2 is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.ADDRESS_LINE_3 <> ADDRESS_LINE_3
                                                                                    OR
                                                                                    (STG.ADDRESS_LINE_3 is null and ADDRESS_LINE_3 is not Null)
                                                                                    OR
                                                                                    (STG.ADDRESS_LINE_3 is not null and ADDRESS_LINE_3 is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.ADDRESS_CITY <> ADDRESS_CITY
                                                                                    OR
                                                                                    (STG.ADDRESS_CITY is null and ADDRESS_CITY is not Null)
                                                                                    OR
                                                                                    (STG.ADDRESS_CITY is not null and ADDRESS_CITY is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.ADDRESS_COUNTY_CODE <> ADDRESS_COUNTY_CODE
                                                                                    OR
                                                                                    (STG.ADDRESS_COUNTY_CODE is null and ADDRESS_COUNTY_CODE is not Null)
                                                                                    OR
                                                                                    (STG.ADDRESS_COUNTY_CODE is not null and ADDRESS_COUNTY_CODE is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.ADDRESS_POST_CODE <> ADDRESS_POST_CODE
                                                                                    OR
                                                                                    (STG.ADDRESS_POST_CODE is null and ADDRESS_POST_CODE is not Null)
                                                                                    OR
                                                                                    (STG.ADDRESS_POST_CODE is not null and ADDRESS_POST_CODE is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.ADDRESS_NATION_CODE <> ADDRESS_NATION_CODE
                                                                                    OR
                                                                                    (STG.ADDRESS_NATION_CODE is null and ADDRESS_NATION_CODE is not Null)
                                                                                    OR
                                                                                    (STG.ADDRESS_NATION_CODE is not null and ADDRESS_NATION_CODE is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.TELEPHONE <> TELEPHONE
                                                                                    OR
                                                                                    (STG.TELEPHONE is null and TELEPHONE is not Null)
                                                                                    OR
                                                                                    (STG.TELEPHONE is not null and TELEPHONE is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.MOBILE_TELEPHONE <> MOBILE_TELEPHONE
                                                                                    OR
                                                                                    (STG.MOBILE_TELEPHONE is null and MOBILE_TELEPHONE is not Null)
                                                                                    OR
                                                                                    (STG.MOBILE_TELEPHONE is not null and MOBILE_TELEPHONE is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.EMAIL_ADDRESS <> EMAIL_ADDRESS
                                                                                    OR
                                                                                    (STG.EMAIL_ADDRESS is null and EMAIL_ADDRESS is not Null)
                                                                                    OR
                                                                                    (STG.EMAIL_ADDRESS is not null and EMAIL_ADDRESS is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.DOMICILE <> DOMICILE
                                                                                    OR
                                                                                    (STG.DOMICILE is null and DOMICILE is not Null)
                                                                                    OR
                                                                                    (STG.DOMICILE is not null and DOMICILE is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.NATIONALITY <> NATIONALITY
                                                                                    OR
                                                                                    (STG.NATIONALITY is null and NATIONALITY is not Null)
                                                                                    OR
                                                                                    (STG.NATIONALITY is not null and NATIONALITY is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.COUNTRY_OF_BIRTH <> COUNTRY_OF_BIRTH
                                                                                    OR
                                                                                    (STG.COUNTRY_OF_BIRTH is null and COUNTRY_OF_BIRTH is not Null)
                                                                                    OR
                                                                                    (STG.COUNTRY_OF_BIRTH is not null and COUNTRY_OF_BIRTH is Null)
                                                                                     )
                                                                                )
                                                                                AND
                                                                                (
                                                                                    (
                                                                                    STG.TT_ADDRESS_LINE_1 <> TT_ADDRESS_LINE_1
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_LINE_1 is null and TT_ADDRESS_LINE_1 is not Null)
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_LINE_1 is not null and TT_ADDRESS_LINE_1 is Null)
                                                                                     )
                                                                                OR
                                                                                    (
                                                                                    STG.TT_ADDRESS_LINE_2 <> TT_ADDRESS_LINE_2
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_LINE_2 is null and TT_ADDRESS_LINE_2 is not Null)
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_LINE_2 is not null and TT_ADDRESS_LINE_2 is Null)
                                                                                     )
                                                                                 OR
                                                                                    (
                                                                                    STG.TT_ADDRESS_LINE_3 <> TT_ADDRESS_LINE_3
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_LINE_3 is null and TT_ADDRESS_LINE_3 is not Null)
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_LINE_3 is not null and TT_ADDRESS_LINE_3 is Null)
                                                                                     )
                                                                                 OR
                                                                                 (
                                                                                    STG.TT_ADDRESS_CITY <> TT_ADDRESS_CITY
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_CITY is null and TT_ADDRESS_CITY is not Null)
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_CITY is not null and TT_ADDRESS_CITY is Null)
                                                                                     )
                                                                                 OR
                                                                                 (
                                                                                    STG.TT_ADDRESS_COUNTY_CODE <> TT_ADDRESS_COUNTY_CODE
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_COUNTY_CODE is null and TT_ADDRESS_COUNTY_CODE is not Null)
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_COUNTY_CODE is not null and TT_ADDRESS_COUNTY_CODE is Null)
                                                                                     )
                                                                                 OR
                                                                                 (
                                                                                    STG.TT_ADDRESS_POST_CODE <> TT_ADDRESS_POST_CODE
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_POST_CODE is null and TT_ADDRESS_POST_CODE is not Null)
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_POST_CODE is not null and TT_ADDRESS_POST_CODE is Null)
                                                                                     )
                                                                                 OR
                                                                                 (
                                                                                    STG.TT_ADDRESS_NATION_CODE <> TT_ADDRESS_NATION_CODE
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_NATION_CODE is null and TT_ADDRESS_NATION_CODE is not Null)
                                                                                    OR
                                                                                    (STG.TT_ADDRESS_NATION_CODE is not null and TT_ADDRESS_NATION_CODE is Null)
                                                                                  )

                                                                                )
                                                                                AND
                                                                                (
                                                                                    (
                                                                                        STG.ENTRY_TERM <> ENTRY_TERM
                                                                                        OR
                                                                                        (STG.ENTRY_TERM is null and ENTRY_TERM is not Null)
                                                                                        OR
                                                                                        (STG.ENTRY_TERM is not null and ENTRY_TERM is Null)
                                                                                     )
                                                                                 OR
                                                                                 (
                                                                                        STG.RESIDENCY_CODE <> RESIDENCY_CODE
                                                                                        OR
                                                                                        (STG.RESIDENCY_CODE is null and RESIDENCY_CODE is not Null)
                                                                                        OR
                                                                                        (STG.RESIDENCY_CODE is not null and RESIDENCY_CODE is Null)
                                                                                     )
                                                                                 OR
                                                                                 (
                                                                                        STG.COURSE_CODE <> COURSE_CODE
                                                                                        OR
                                                                                        (STG.COURSE_CODE is null and COURSE_CODE is not Null)
                                                                                        OR
                                                                                        (STG.COURSE_CODE is not null and COURSE_CODE is Null)
                                                                                     )
                                                                                 OR
                                                                                 (
                                                                                        STG.COURSE_KEY <> COURSE_KEY
                                                                                        OR
                                                                                        (STG.COURSE_KEY is null and COURSE_KEY is not Null)
                                                                                        OR
                                                                                        (STG.COURSE_KEY is not null and COURSE_KEY is Null)
                                                                                     )
                                                                                 OR
                                                                                 (
                                                                                        STG.YEAR_OF_ENTRY <> YEAR_OF_ENTRY
                                                                                        OR
                                                                                        (STG.YEAR_OF_ENTRY is null and YEAR_OF_ENTRY is not Null)
                                                                                        OR
                                                                                        (STG.YEAR_OF_ENTRY is not null and YEAR_OF_ENTRY is Null)
                                                                                     )
                                                                                 OR
                                                                                 (
                                                                                        STG.MONTH_OF_ENTRY <> MONTH_OF_ENTRY
                                                                                        OR
                                                                                        (STG.MONTH_OF_ENTRY is null and MONTH_OF_ENTRY is not Null)
                                                                                        OR
                                                                                        (STG.MONTH_OF_ENTRY is not null and MONTH_OF_ENTRY is Null)
                                                                                     )
                                                                                 OR
                                                                                 (
                                                                                        STG.SSDT_CODE_ENTRY <> SSDT_CODE_ENTRY
                                                                                        OR
                                                                                        (STG.SSDT_CODE_ENTRY is null and SSDT_CODE_ENTRY is not Null)
                                                                                        OR
                                                                                        (STG.SSDT_CODE_ENTRY is not null and SSDT_CODE_ENTRY is Null)
                                                                                     )
                                                                                )
                                                                                                                );
Re: sql performance (merged) [message #690270 is a reply to message #690268] Wed, 12 February 2025 00:34 Go to previous messageGo to next message
Michel Cadot
Messages: 68737
Registered: March 2007
Location: Saint-Maur, France, https...
Senior Member
Account Moderator

For any SQL performances question, please read https://www.orafaq.com/forum/mv/msg/206002/433888/#msg_433888 and post the required information.

Re: sql performance (merged) [message #690278 is a reply to message #690270] Thu, 13 February 2025 04:06 Go to previous message
cookiemonster
Messages: 13965
Registered: September 2008
Location: Rainy Manchester
Senior Member
Here's a simplified version of what you're doing:
UPDATE STAGING STG
SET (STG.STATUS,
     STG.DATE_EXTRACT,
     <other cols>) = (SELECT 3,
                             sysdate
                             <equivalent other cols>
                      FROM TEMPSTAGING
                      WHERE STG.APPLICANT_NO = APPLICANT_NO 
                      AND STG.CHOICE_TYPE = CHOICE_TYPE 
                      AND STG.CHOICE_TYPE_NO = CHOICE_TYPE_NO 
                      AND STG.pidm = pidm
                      AND <any of the other cols differs TEMPSTAGING vs STAGING>
                     )
WHERE (STG.PIDM, STG.APPLICANT_NO, STG.CHOICE_TYPE, STG.CHOICE_TYPE_NO) IN
       (SELECT PIDM, APPLICANT_NO, CHOICE_TYPE, CHOICE_TYPE_NO
        FROM SALFORD.UCASTEMPSTAGING
        WHERE STG.APPLICANT_NO = APPLICANT_NO 
        AND STG.CHOICE_TYPE = CHOICE_TYPE 
        AND STG.CHOICE_TYPE_NO = CHOICE_TYPE_NO 
        AND STG.pidm = pidm
        AND <any of the other cols differs UCASTEMPSTAGING vs STAGING>
       );
That's going to do 3 full table scans. Indexes are not an option here. Rewriting as a merge may help a little bit in this case.
There's nothing you can do with the AND/OR's that's likely to improve matters.
I think if you want to speed things up you need to look at the overall process rather than this update in isolation.
Why are there 3 tables involved here? Why are you getting updated values from TEMPSTAGING while checking for existence in UCASTEMPSTAGING?
How many rows in the 3 tables? You say 30K but you haven't said which one.
How long is it actually taking to run?
How long do you want it to take?

Previous Topic: SQL Help Parsing Column
Next Topic: Row generator
Goto Forum:
  


Current Time: Sat Feb 22 22:01:06 CST 2025