Wanted to optimize a query with the minus that it takes too much time ... if they can give thanked help. I have a query that runs against a pretty large table,the query takes forever and presumably does a full table scan.This query is very very slow!
select
transaction_id as APPL_ID
,cast(reason_desc as VARCHAR2(2000)) as APPL_REJECT_REASON_DESC
,cast(reason_code as VARCHAR2(2000)) as APPL_REJECT_REASON
,cast(user_reject as VARCHAR2(100)) as APPL_REJECT_USER
,cast(step_reject as VARCHAR2(100)) as APPL_REJECT_USER_ROLE
,cast(reason_desc_vn as VARCHAR2(2000)) as APPL_REJECT_REASON_DESC_VN
from(
select wfi.item_id transaction_id
,cq1.name as reason_desc
,cq1.response as reason_code
,COALESCE(wft.executed_by, wft.recipient_shortname) as user_reject
,wft.profile_access_right_sname as step_reject
,row_number() over (partition by wfi.item_id order by wft.start_date desc) stt
,cq1.name_1 as reason_desc_vn
--SELECT 1
from STA.STA_ACL_WF_INSTANCE wfi
inner join STA.STA_ACL_WF_TASK wft
on (wfi.item = 'transaction' and wfi.wf_instance_id = wft.wf_instance_id)
inner join (
SELECT t.task_id
,LISTAGG (t.response, ', ') WITHIN GROUP (ORDER BY t.response) as response
,LISTAGG (t11.name, ', ') WITHIN GROUP (ORDER BY t11.name) as name
,LISTAGG (t11.name_1, ', ') WITHIN GROUP (ORDER BY t11.name_1) as name_1
FROM (
SELECT task_id,
CAST(TRIM(regexp_substr(t.RESPONSE, '[^,]+', 1, levels.column_value)) AS VARCHAR2(100)) AS RESPONSE
FROM sta.sta_acl_wf_task_col_quest t,
table(cast(multiset(select level from dual connect by level <= length (
regexp_replace(t.RESPONSE, '[^,]+')) + 1) as sys.OdciNumberList)) levels
WHERE t.question in ('Reject Reason','Cancel Reason','Reject Reason For Recommendation','Reject Reason For Approval')
AND t.response is not null
) t
LEFT JOIN STA.STA_ACL_STATIC_DATA_TABLE t11 on (t.response= t11.SHORTNAME)
WHERE 1=1
GROUP BY t.task_id
)cq1 on wft.task_id = cq1.task_id
) t8 where stt=1
Explain SQL
PLAN_TABLE_OUTPUT |
----------------------------------------------------------------------------------------------------------------------------------+
Plan hash value: 3937279373 |
|
----------------------------------------------------------------------------------------------------------------------------- |
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | |
----------------------------------------------------------------------------------------------------------------------------- |
| 0 | SELECT STATEMENT | | 9560M| 53T| | 3339M (2)| 72:27:52 | |
|* 1 | VIEW | | 9560M| 53T| | 3339M (2)| 72:27:52 | |
|* 2 | WINDOW NOSORT | | 9560M| 8431G| | 3339M (2)| 72:27:52 | |
| 3 | SORT GROUP BY | | 9560M| 8431G| 8580G| 3339M (2)| 72:27:52 | |
|* 4 | HASH JOIN RIGHT OUTER | | 9560M| 8431G| 3392K| 650M (1)| 14:07:31 | |
| 5 | TABLE ACCESS FULL | STA_ACL_STATIC_DATA_TABLE | 19812 | 3153K| | 399 (3)| 00:00:01 | |
| 6 | NESTED LOOPS | | 7985M| 5830G| | 40M (4)| 00:52:07 | |
|* 7 | HASH JOIN | | 488K| 364M| 446M| 958K (3)| 00:01:15 | |
|* 8 | TABLE ACCESS FULL | STA_ACL_WF_INSTANCE | 1592K| 428M| | 77403 (4)| 00:00:07 | |
|* 9 | HASH JOIN | | 986K| 470M| 57M| 787K (3)| 00:01:02 | |
|* 10 | TABLE ACCESS FULL | STA_ACL_WF_TASK_COL_QUEST | 986K| 46M| | 396K (5)| 00:00:32 | |
| 11 | TABLE ACCESS FULL | STA_ACL_WF_TASK | 5496K| 2364M| | 139K (3)| 00:00:11 | |
| 12 | COLLECTION ITERATOR SUBQUERY FETCH| | 16360 | 32720 | | 80 (4)| 00:00:01 | |
|* 13 | CONNECT BY WITHOUT FILTERING | | | | | | | |
| 14 | FAST DUAL | | 1 | | | 3 (0)| 00:00:01 | |
----------------------------------------------------------------------------------------------------------------------------- |
|
Predicate Information (identified by operation id): |
--------------------------------------------------- |
|
1 - filter("STT"=1) |
2 - filter(ROW_NUMBER() OVER ( PARTITION BY "WFI"."ITEM_ID" ORDER BY INTERNAL_FUNCTION("WFT"."START_DATE") DESC |
)<=1) |
4 - access("T11"."SHORTNAME"(+)=SYS_OP_C2C(CAST(TRIM( REGEXP_SUBSTR ("T"."RESPONSE" /*+ LOB_BY_VALUE */ |
,'[^,]+',1,VALUE(KOKBF$))) AS VARCHAR2(100)))) |
7 - access("WFI"."WF_INSTANCE_ID"="WFT"."WF_INSTANCE_ID") |
8 - filter("WFI"."ITEM"=U'transaction') |
9 - access("WFT"."TASK_ID"="TASK_ID") |
10 - filter(("T"."QUESTION"=U'Cancel Reason' OR "T"."QUESTION"=U'Reject Reason' OR "T"."QUESTION"=U'Reject Reason |
For Approval' OR "T"."QUESTION"=U'Reject Reason For Recommendation') AND "T"."RESPONSE" /*+ LOB_BY_VALUE */ IS NOT |
NULL) |
13 - filter(LEVEL<=LENGTH( REGEXP_REPLACE (:B1,'[^,]+'))+1) |
Would you please guide me on how I can change the query to get better performance? Any help would be appreciated.