Tuning this query
Hi,
Can anybody please help me in tuning this query?
update tablec c set c.col1 = (select b.col1 from tableb b where c.col2 = b.col2 ) where
c.col2 in (select distinct a.col1 from tablec a, tableb b where a.col2 = b.col2 and a.col1 != b.col1 )
When i use "alter session force parallel DML" before running this query it takes only seconds, but when i use parallel hint or run it without hint, its running for hours.
Thanks for your Help
Hi itssan,
You could try EXISTS.
I think this is the same:
update tablec c
set c.col1 =
(select b.col1
from tableb b
where b.col2 = c.col2)
where exists (select null
from tablec a, tableb b
where a.col2 = b.col2
and a.col1 != b.col1
and a.col1 = c.col2);Regards
Peter
Similar Messages
-
Please can you help me in Tuning this query..?
Hi ,
Please can you help me in re-structuring this query? .Details are given below.
I have 2 tables as shown below and data is like this.
Position
COD IND
AAA N
BBB N
CCC N
DDD Y
Distance
orig dest
AAA BBB
BBB CCC
AAA CCC
I need to create the records like this
start end
DDD AAA
DDD BBB
DDD CCC
The query which i am using now for this is
select p.code AS start,
P1.CODE AS end
from position p, position p1
where
P.CODE != P1.CODE
AND (P.ind = 'Y' or P1.IND = 'Y')
AND not exists
(select 1
from distance d
where (d.orig = p.code or d.dest = p.code)
and (d.orig = p1.code or d.dest = p1.code))
table is having above a crore record. so its taking a lot of time.
Please someone please help in tuning this query?
Thanks and regards,
ShabirLooks like you want this
select a.strt, b.ends from
(select p.code strt from position p where p.ind='Y') a,
(select p.code ends from position p where p.ind='N') b
where not exists (select 1 from distance d where d.orig=a.strt or d.dest=a.strt);
DDD AAA
DDD BBB
DDD CCCYour query result is:
AAA DDD
BBB DDD
CCC DDD
DDD AAA
DDD BBB
DDD CCCYou should be more descriptive about what kind of result you want, so that people can get more interested in helping you. -
Can someone please suggest me in tuning this query?
Can someone please suggest me in tuning this query?
select pemail.email_oid,
pemail.parent_oid,
md.message_data_oid,
ea.email_account_oid,
ef.email_folder_oid,
md.channel,
ea.email_account_name,
md.from_address,
md.to_address,
eref.ref_id ticket_number,
( select count(email_oid) from esg.email where email_oid = pemail.email_oid and email.attachment_flag = 'Y' ) attachment_flag_a,
( select count(email_oid) from esg.email cemail
where cemail.parent_oid = pemail.email_oid and
( cemail.email_type is null or cemail.email_type != 'S') and
cemail.vec_status not in ('G', 'D', 'P') and
cemail.vec_status in ('N', 'O') and
cemail.attachment_flag = 'Y' ) attachment_flag_b,
md.received_date,
pemail.vec_status,
pemail.email_type,
md.subject,
md.content,
pemail.tracking_id,
pemail.assignee_oid,
( select count(email_oid) from email cemail
where cemail.parent_oid = pemail.email_oid and
(cemail.email_type is null or cemail.email_type != 'S' ) and
cemail.vec_status not in ('G','D', 'P') and
cemail.vec_status in ('N', 'O' ) ) child_email_cnt,
( select count(0) from email
where vec_status = 'N' and
email_type = 'O' and
email_oid = pemail.email_oid and
vec_status in ('N', 'O' )) parent_newemail_cnt,
( select count(0) from email
where vec_status = 'N' and
email_type = 'O' and
parent_oid = pemail.email_oid and
vec_status in ('N', 'O' )) child_newemail_cnt
From esg.email pemail,
esg.message_data md,
esg.email_account ea,
esg.email_folder ef,
(select email_oid, ref_id from email_ref
where email_ref_oid in (select min(email_ref_oid) from email_ref where ref_tid = -9000 and ref_sid = 'ESG' and confirmed_flag = 'Y' group by email_oid )) eref
where
md.message_data_oid = pemail.message_data_oid and
pemail.email_folder_oid = ef.email_folder_oid(+) and
ef.email_account_oid = ea.email_account_oid(+) and
pemail.vec_status not in ('G','D','P') and
pemail.vec_status in ('N', 'O') and
pemail.email_oid = eref.email_oid(+) and
lower(md.channel) in ('[email protected]', '[email protected]') and
pemail.email_oid in
( select parent.email_oid from message_data md,
email parent
where md.message_data_oid = parent.message_data_oid and
parent.parent_oid is null and
pemail.email_type = 'O' and
lower(md.to_address) in
( select lower(contact_info) from esg.user_profile up,
esg.person p,
esg.person_contact pc
where up.user_oid = 802239 and
up.person_oid = p.person_oid and
p.person_oid = pc.person_oid and
pc.contact_type_oid = 6 )
union all
select child.parent_oid from message_data md,
email child
where md.message_data_oid = child.message_data_oid and
parent_oid is not null and
child.vec_status not in ('G','D','P') and
child.vec_status in ('N', 'O') and
child.email_type = 'O' and
lower(md.to_address) in
( select lower(contact_info) from esg.user_profile up,
esg.person p,
esg.person_contact pc
where up.user_oid = 802239 and
up.person_oid = p.person_oid and
p.person_oid = pc.person_oid and
pc.contact_type_oid = 6 )
ORDER BY RECEIVED_DATE DESC;
1st run
Elapsed: 00:00:03.39
2nd run
Elapsed: 00:00:01.80
SQL> Select TABLE_NAME,LAST_ANALYZED, num_rows from user_tables where table_name in ('EMAIL','MESSAGE_DATA', 'EMAIL_ACCOUNT','EMAIL_FOLDER','EMAIL_REF','USER_PROFILE','PERSON','PERSON_CONTACT');
TABLE_NAME LAST_ANAL NUM_ROWS
USER_PROFILE 11-JUN-11 385808
PERSON_CONTACT 11-JUN-11 698624
PERSON 11-JUN-11 405364
MESSAGE_DATA 11-JUN-11 1069
EMAIL_REF 11-JUN-11 559
EMAIL_FOLDER 11-JUN-11 563
EMAIL_ACCOUNT 11-JUN-11 563
EMAIL 11-JUN-11 101652
8 rows selected.
row count from all tables
email - 102063
message_data - 1069
email_account - 563
email_folder - 563
email_ref - 559
user_profile - 386055
person - 404057
person_contact - 698696
Thanks,
Suman M.======================================
Execution Plan
Plan hash value: 110416976
| Id | Operation | Name | Rows | Bytes | Cost |
| 0 | SELECT STATEMENT | | 1 | 1361 | 17 |
| 1 | SORT AGGREGATE | | 1 | 8 | |
|* 2 | TABLE ACCESS BY INDEX ROWID | EMAIL | 1 | 8 | 1 |
|* 3 | INDEX UNIQUE SCAN | PK_EMAIL | 1 | | 1 |
| 4 | SORT AGGREGATE | | 1 | 8 | |
|* 5 | TABLE ACCESS BY INDEX ROWID | EMAIL | 1 | 8 | 1 |
|* 6 | INDEX RANGE SCAN | FK_EMAIL_PARENT | 3 | | 1 |
| 7 | SORT AGGREGATE | | 1 | 6 | |
|* 8 | TABLE ACCESS BY INDEX ROWID | EMAIL | 1 | 6 | 1 |
|* 9 | INDEX RANGE SCAN | FK_EMAIL_PARENT | 3 | | 1 |
| 10 | SORT AGGREGATE | | 1 | 10 | |
|* 11 | TABLE ACCESS BY INDEX ROWID | EMAIL | 1 | 10 | 1 |
|* 12 | INDEX UNIQUE SCAN | PK_EMAIL | 1 | | 1 |
| 13 | SORT AGGREGATE | | 1 | 6 | |
|* 14 | TABLE ACCESS BY INDEX ROWID | EMAIL | 1 | 6 | 1 |
|* 15 | INDEX RANGE SCAN | FK_EMAIL_PARENT | 3 | | 1 |
| 16 | SORT ORDER BY | | 1 | 1361 | 17 |
|* 17 | FILTER | | | | |
| 18 | NESTED LOOPS OUTER | | 1 | 1361 | 5 |
| 19 | NESTED LOOPS OUTER | | 1 | 1336 | 4 |
| 20 | NESTED LOOPS | | 1 | 1328 | 3 |
| 21 | NESTED LOOPS OUTER | | 1 | 53 | 2 |
| 22 | INLIST ITERATOR | | | | |
| 23 | TABLE ACCESS BY INDEX ROWID | EMAIL | 1 | 35 | 1 |
|* 24 | INDEX RANGE SCAN | IE_EMAIL | 55 | | 1 |
| 25 | VIEW PUSHED PREDICATE | | 1 | 18 | 1 |
| 26 | NESTED LOOPS | | 1 | 36 | 4 |
| 27 | VIEW | VW_NSO_1 | 11 | 143 | 3 |
| 28 | SORT GROUP BY | | 11 | 231 | 3 |
|* 29 | TABLE ACCESS BY INDEX ROWID| EMAIL_REF | 11 | 231 | 3 |
|* 30 | INDEX FULL SCAN | AK1_EMAIL_REF | 21 | | 3 |
|* 31 | TABLE ACCESS BY INDEX ROWID | EMAIL_REF | 1 | 23 | 1 |
|* 32 | INDEX UNIQUE SCAN | PK_EMAIL_REF | 1 | | 1 |
|* 33 | TABLE ACCESS BY INDEX ROWID | MESSAGE_DATA | 1 | 1275 | 1 |
|* 34 | INDEX UNIQUE SCAN | PK_MESSAGE_DATA | 1 | | 1 |
| 35 | TABLE ACCESS BY INDEX ROWID | EMAIL_FOLDER | 1 | 8 | 1 |
|* 36 | INDEX UNIQUE SCAN | PK_EMAIL_FOLDER | 1 | | 1 |
| 37 | TABLE ACCESS BY INDEX ROWID | EMAIL_ACCOUNT | 1 | 25 | 1 |
|* 38 | INDEX UNIQUE SCAN | PK_EMAIL_ACCOUNT | 1 | | 1 |
| 39 | UNION-ALL | | | | |
| 40 | NESTED LOOPS SEMI | | 1 | 116 | 5 |
| 41 | NESTED LOOPS | | 1 | 50 | 2 |
|* 42 | TABLE ACCESS BY INDEX ROWID | EMAIL | 1 | 14 | 1 |
|* 43 | INDEX UNIQUE SCAN | PK_EMAIL | 1 | | 1 |
| 44 | TABLE ACCESS BY INDEX ROWID | MESSAGE_DATA | 1069 | 38484 | 1 |
|* 45 | INDEX UNIQUE SCAN | PK_MESSAGE_DATA | 1 | | 1 |
|* 46 | VIEW | VW_NSO_3 | 1 | 66 | 3 |
|* 47 | FILTER | | | | |
| 48 | NESTED LOOPS | | 1 | 45 | 3 |
| 49 | NESTED LOOPS | | 1 | 15 | 2 |
| 50 | TABLE ACCESS BY INDEX ROWID | USER_PROFILE | 1 | 10 | 1 |
|* 51 | INDEX UNIQUE SCAN | PK_USER | 1 | | 1 |
|* 52 | INDEX UNIQUE SCAN | PK_PERSON | 405K| 1979K| 1 |
|* 53 | TABLE ACCESS BY INDEX ROWID | PERSON_CONTACT | 1 | 30 | 1 |
|* 54 | INDEX RANGE SCAN | FK_PERSON_CONTACT_PERSON | 2 | | 1 |
| 55 | NESTED LOOPS | | 1 | 114 | 5 |
| 56 | MERGE JOIN CARTESIAN | | 1 | 78 | 4 |
|* 57 | TABLE ACCESS BY INDEX ROWID | EMAIL | 1 | 12 | 1 |
|* 58 | INDEX RANGE SCAN | FK_EMAIL_PARENT | 1 | | 1 |
| 59 | BUFFER SORT | | 1 | 66 | 3 |
| 60 | VIEW | VW_NSO_2 | 1 | 66 | 3 |
| 61 | SORT UNIQUE | | 1 | 45 | |
| 62 | NESTED LOOPS | | 1 | 45 | 3 |
| 63 | NESTED LOOPS | | 1 | 15 | 2 |
| 64 | TABLE ACCESS BY INDEX ROWID| USER_PROFILE | 1 | 10 | 1 |
|* 65 | INDEX UNIQUE SCAN | PK_USER | 1 | | 1 |
|* 66 | INDEX UNIQUE SCAN | PK_PERSON | 405K| 1979K| 1 |
|* 67 | TABLE ACCESS BY INDEX ROWID | PERSON_CONTACT | 1 | 30 | 1 |
|* 68 | INDEX RANGE SCAN | FK_PERSON_CONTACT_PERSON | 2 | | 1 |
|* 69 | TABLE ACCESS BY INDEX ROWID | MESSAGE_DATA | 1 | 36 | 1 |
|* 70 | INDEX UNIQUE SCAN | PK_MESSAGE_DATA | 1 | | 1 |
Predicate Information (identified by operation id):
2 - filter("EMAIL"."ATTACHMENT_FLAG"='Y')
3 - access("EMAIL_OID"=:B1)
5 - filter("CEMAIL"."EMAIL_TYPE"<>'S' AND "CEMAIL"."VEC_STATUS"<>'G' AND
"CEMAIL"."VEC_STATUS"<>'D' AND "CEMAIL"."VEC_STATUS"<>'P' AND ("CEMAIL"."VEC_STATUS"='N'
OR "CEMAIL"."VEC_STATUS"='O') AND "CEMAIL"."ATTACHMENT_FLAG"='Y')
6 - access("CEMAIL"."PARENT_OID"=:B1)
8 - filter("CEMAIL"."EMAIL_TYPE"<>'S' AND "CEMAIL"."VEC_STATUS"<>'G' AND
"CEMAIL"."VEC_STATUS"<>'D' AND "CEMAIL"."VEC_STATUS"<>'P' AND ("CEMAIL"."VEC_STATUS"='N'
OR "CEMAIL"."VEC_STATUS"='O'))
9 - access("CEMAIL"."PARENT_OID"=:B1)
11 - filter("VEC_STATUS"='N' AND "EMAIL_TYPE"='O')
12 - access("EMAIL_OID"=:B1)
14 - filter("VEC_STATUS"='N' AND "EMAIL_TYPE"='O')
15 - access("PARENT_OID"=:B1)
17 - filter( EXISTS ( (SELECT "PARENT"."EMAIL_OID" FROM "EMAIL" "PARENT","MESSAGE_DATA"
"MD", (SELECT LOWER("CONTACT_INFO") "$nso_col_1" FROM "ESG"."PERSON_CONTACT"
"PC","ESG"."PERSON" "P","ESG"."USER_PROFILE" "UP" WHERE :B1='O' AND
"UP"."USER_OID"=802239 AND "UP"."PERSON_OID"="P"."PERSON_OID" AND
"P"."PERSON_OID"="PC"."PERSON_OID" AND "PC"."CONTACT_TYPE_OID"=6)
"VW_NSO_3" WHERE
"$nso_col_1"=LOWER("MD"."TO_ADDRESS") AND "MD"."MESSAGE_DATA_OID"="PARENT"."MESSAGE_DATA_O
ID" AND "PARENT"."EMAIL_OID"=:B2 AND "PARENT"."PARENT_OID" IS NULL
) UNION ALL (SELECT
"CHILD"."PARENT_OID" FROM "EMAIL" "CHILD","MESSAGE_DATA" "MD", (SELECT DISTINCT
LOWER("CONTACT_INFO") "$nso_col_1" FROM "ESG"."PERSON_CONTACT" "PC","ESG"."PERSON"
"P","ESG"."USER_PROFILE" "UP" WHERE "UP"."USER_OID"=802239 AND
"UP"."PERSON_OID"="P"."PERSON_OID" AND "P"."PERSON_OID"="PC"."PERSON_OID" AND
"PC"."CONTACT_TYPE_OID"=6) "VW_NSO_2" WHERE "MD"."MESSAGE_DATA_OID
"="CHILD"."MESSAGE_DATA_
OID" AND "$nso_col_1"=LOWER("MD"."TO_ADDRESS") AND "CHILD"."PARENT
_OID"=:B3 AND
"CHILD"."VEC_STATUS"<>'G' AND "CHILD"."VEC_STATUS"<>'D' AND "CHILD
"."VEC_STATUS"<>'P' AND
("CHILD"."VEC_STATUS"='N' OR "CHILD"."VEC_STATUS"='O') AND "CHILD"
."EMAIL_TYPE"='O' AND
"PARENT_OID" IS NOT NULL)))
24 - access("PEMAIL"."VEC_STATUS"='N' OR "PEMAIL"."VEC_STATUS"='O')
filter("PEMAIL"."VEC_STATUS"<>'G' AND "PEMAIL"."VEC_STATUS"<>'D' AND
"PEMAIL"."VEC_STATUS"<>'P')
29 - filter("CONFIRMED_FLAG"='Y')
30 - access("REF_SID"='ESG' AND "REF_TID"=(-9000))
filter("REF_TID"=(-9000) AND "REF_SID"='ESG')
31 - filter("EMAIL_OID"="PEMAIL"."EMAIL_OID")
32 - access("EMAIL_REF_OID"="$nso_col_1")
33 - filter(LOWER("MD"."CHANNEL")='[email protected]' OR
LOWER("MD"."CHANNEL")='[email protected]')
34 - access("MD"."MESSAGE_DATA_OID"="PEMAIL"."MESSAGE_DATA_OID")
36 - access("PEMAIL"."EMAIL_FOLDER_OID"="EF"."EMAIL_FOLDER_OID"(+))
38 - access("EF"."EMAIL_ACCOUNT_OID"="EA"."EMAIL_ACCOUNT_OID"(+))
42 - filter("PARENT"."PARENT_OID" IS NULL)
43 - access("PARENT"."EMAIL_OID"=:B1)
45 - access("MD"."MESSAGE_DATA_OID"="PARENT"."MESSAGE_DATA_OID")
46 - filter("$nso_col_1"=LOWER("MD"."TO_ADDRESS"))
47 - filter(:B1='O')
51 - access("UP"."USER_OID"=802239)
52 - access("UP"."PERSON_OID"="P"."PERSON_OID")
53 - filter("PC"."CONTACT_TYPE_OID"=6)
54 - access("P"."PERSON_OID"="PC"."PERSON_OID")
57 - filter("CHILD"."VEC_STATUS"<>'G' AND "CHILD"."VEC_STATUS"<>'D' AND
"CHILD"."VEC_STATUS"<>'P' AND ("CHILD"."VEC_STATUS"='N' OR "CHILD"
."VEC_STATUS"='O') AND
"CHILD"."EMAIL_TYPE"='O')
58 - access("CHILD"."PARENT_OID"=:B1)
filter("PARENT_OID" IS NOT NULL)
65 - access("UP"."USER_OID"=802239)
66 - access("UP"."PERSON_OID"="P"."PERSON_OID")
67 - filter("PC"."CONTACT_TYPE_OID"=6)
68 - access("P"."PERSON_OID"="PC"."PERSON_OID")
69 - filter("$nso_col_1"=LOWER("MD"."TO_ADDRESS"))
70 - access("MD"."MESSAGE_DATA_OID"="CHILD"."MESSAGE_DATA_OID")
Note
- cpu costing is off (consider enabling it)
Statistics
3103 recursive calls
0 db block gets
599654 consistent gets
2915 physical reads
0 redo size
1955 bytes sent via SQL*Net to client
3895 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
331 sorts (memory)
0 sorts (disk)
0 rows processed
===================================== -
Hi,
I have a query in my proj where the same table is looked up twice in the same query.
Can anybody suggest in improving the performance of this query?
select * from table1 a1 where (a1.column1, a1.column2, a1.column3, a1.column4, a1.column5, a1.column6, a1.column7, a1.column8, a1.column9,
a1.column10) in ( select a2.column1, a2.column2, a2.column3, a2.column4, a2.column5, a2.column6, a2.column7, a2.column8, a2.column9,
a2.column10 from table1 a2 where column20 = '<condn>')
The table1 used here is same in outer query as well as the sub query. this is a example of what we use here, and the table1 contains 30 million rows. Though, creating index with 10 columns can be a option, we already have a unique index with 11 columns(which includes 10 from this query) and will that be helpful in anyway? or the same existing index can be forced?
Thanks a lot for ur timeDepending on the selectivity of column20 I am not sure Index is the best way to go. It might perform better with two full scans and a hash-join.
Anyway, I do prefer the syntax:
select /*+ leading(a2) */ a1.*
from table1 a1, table1 a2
where a2.column20 = '<condn>'
and a1.column1 = a2.column1
and a1.column2 = a2.column2
and a1.column3 = a2.column3
and a1.column4 = a2.column4
and a1.column5 = a2.column5
and a1.column6 = a2.column6
and a1.column7 = a2.column7
and a1.column8 = a2.column8
and a1.column9 = a2.column9
and a1.column10 = a2.column10;I've added a leading hint to tell oracle that the start table is a2. Might be useless.
Ensure your stats are up to date. You might need histograms here if your column20 is skewed.
Hope this helps,
François
Edited by: Francois Berger on Oct 24, 2008 1:47 AM -
Help in fine tuning this query
My query id this,
select a.event_id,a.document_id
from sample_transaction a
where exists (select 1 from sample_transaction b where b.event_id <> a.event_id and b.document_id = a.document_id );
The execution plan is like this,
SELECT STATEMENT Cost = 5596
FILTER
TABLE ACCESS FULL SAMPLE_TRANSACTION
TABLE ACCESS BY INDEX ROWID SAMPLE_TRANSACTION
INDEX RANGE SCAN I_SAMPLE_TRANSACTION_FK_EVT
There are 6 million records in the table.
How can i fine tune this query so that i get the results
Example is
my table has
EVENT_ID DOCUMENT_ID
100 200
100 200
101 201
102 201
103 203
104 203
105 204
105 204
106 106
My result should be
EVENT_ID DOCUMENT_ID
101 201
102 201
103 203
104 203
nullBased on your select statement, you will bring back every row in sample_transaction where the document is referenced by more than one event. Looking at it another way, the only rows skipped are those where the document is only used by one event.
The full table scan is not necessarilly a problem since Oracle has to check all rows. You may improve performance if you add an index on document_id. That will allow Oracle to do a better query on the EXISTS clause. Remember to rebuild your statistics after adding the index. -
Hi all i have this query:
SELECT VTA.CO_VENDEDOR
,VTA.NB_VENDEDOR
,VTA.CO_CLASE_CLIENTE
,VTA.DE_CLASE_CLIENTE
,VTA.CO_CLIENTE
,VTA.NB_CLIENTE
,VTA.MN_VENDIDO
,NVL(DEV.MN_DEVUELTO,0) MN_DEVUELTO
,VTA.MN_VENDIDO - NVL(DEV.MN_DEVUELTO,0) MN_NETO_VENDIDO
,NVL(COB.MN_COBRADO,0) MN_COBRADO
,NVL(COB.MN_DESCUENTO,0) MN_DESCUENTO
,NVL(COB.MN_COBRADO,0) + NVL(COB.MN_DESCUENTO,0) MN_COBRADO_MAS_DESCUENTO
FROM (SELECT FCL.CTV_CO_CLASE_ORGANIZACION CO_CLASE_CLIENTE
,FCL.CTV_DE_CLASE_ORGANIZACION DE_CLASE_CLIENTE
,FCL.CO_ORGANIZACION CO_CLIENTE
,FCL.ORG_NB_CLIENTE NB_CLIENTE
,FCL.PER_CO_IDENTIFICACION_VENDEDOR CO_VENDEDOR
,FCL.PER_NB_PRIMER_NOMBRE_VENDEDOR||' '||
FCL.PER_NB_PRIMER_APELLIDO_VEND NB_VENDEDOR
,SUM((CA_PRODUCTO * (PR_PRODUCTO - NVL(PR_DESCUENTO_PRODUCTO,0))) * (1 - NVL(PC_DESCUENTO,0))) MN_VENDIDO
FROM S04_FACTURA_CLIENTE_TOTAL_R FCL
,S04_FACTURA_CLIENTE_PRD_TOT FPR
,(SELECT FCP.FAC_ID_FACTURA
,SUM(DDC.MN_DEBITO_CREDITO) /
SUM(FCP.CA_PRODUCTO * (FCP.PR_PRODUCTO - NVL(FCP.PR_DESCUENTO_PRODUCTO,0))) PC_DESCUENTO
FROM S04_DOCUMENTO_DEBITO_CREDITO_R DDC
,S04_FACTURA_CLIENTE_PRD_TOT FCP
WHERE DDC.ID_DOCUMENTO_REFERENCIA = FCP.FAC_ID_FACTURA
AND DDC.TDC_IN_DEBITO_CREDITO = 'C'
GROUP BY FCP.FAC_ID_FACTURA) DCT
WHERE FCL.ID_REGISTRO = FPR.FAC_ID_FACTURA
AND DCT.FAC_ID_FACTURA (+) = FPR.FAC_ID_FACTURA
AND FCL.FE_EMISION BETWEEN to_date('01112009','ddmmyyyy') AND to_date('29112009','ddmmyyyy')
AND FCL.ORG_ID_CLIENTE = NVL(NULL,FCL.ORG_ID_CLIENTE)
AND FCL.PER_ID_VENDEDOR = NVL(7647771,FCL.PER_ID_VENDEDOR)
AND FCL.CTV_CO_ESTADO_DOCUMENTO = 'EM'
AND FCL.UBG_ID_UBICACION_CLIENTE in (SELECT ID_REGISTRO
FROM S00_UBICACION_GEOGRAFICA
START WITH ID_REGISTRO = nvl(NULL, FCL.UBG_ID_UBICACION_CLIENTE)
CONNECT BY PRIOR ID_REGISTRO = UBG_ID_UBICACION_PADRE)
GROUP BY FCL.CTV_CO_CLASE_ORGANIZACION
,FCL.CTV_DE_CLASE_ORGANIZACION
,FCL.CO_ORGANIZACION
,FCL.ORG_NB_CLIENTE
,PER_CO_IDENTIFICACION_VENDEDOR
,PER_NB_PRIMER_NOMBRE_VENDEDOR||' '||
PER_NB_PRIMER_APELLIDO_VEND) VTA
,(SELECT NDC .CTV_CO_CLASE_ORGANIZACION CO_CLASE_CLIENTE
,NDC.CTV_DE_CLASE_ORGANIZACION DE_CLASE_CLIENTE
,NDC.CO_CLIENTE
,NDC.ORG_NB_CLIENTE NB_CLIENTE
,FCL.PER_CO_IDENTIFICACION_VENDEDOR CO_VENDEDOR
,FCL.PER_NB_PRIMER_NOMBRE_VENDEDOR||' '||
FCL.PER_NB_PRIMER_APELLIDO_VEND NB_VENDEDOR
,SUM(CA_PRODUCTO * (PR_PRODUCTO - NVL(PR_DESCUENTO_PRODUCTO,0))) MN_DEVUELTO
FROM S06_NOTA_DEBITO_CREDITO_TOT_R NDC
,S06_DETALLE_NOTA_DEB_CRED_TOT DND
,S04_FACTURA_CLIENTE_TOTAL_R FCL
WHERE NDC.ID_REGISTRO = DND.NDC_ID_NOTA_DEBITO_CREDITO
AND NDC.CTV_CO_TIPO_DOCUMENTO = SK00_BUSCAR.F_VCT('CO_TIPO_DOCUMENTO_NOTA_CREDITO_FISCAL')
AND NDC.CTV_CO_ESTADO_DOCUMENTO = SK00_BUSCAR.F_VCT('CO_ESTADO_DOCUMENTO_EMITIDO')
AND NDC.FE_EMISION BETWEEN to_date('01112009','ddmmyyyy') AND to_date('29112009','ddmmyyyy')
AND (NDC.CTV_CO_MOTIVO_NOTA = SK00_BUSCAR.F_VCT('CO_MOTIVO_NOE_DEVOLUCION')
OR NDC.CTV_CO_MOTIVO_NOTA = SK00_BUSCAR.F_VCT('CO_MOTIVO_AJUSTE_PRECIO_NCD'))
AND NDC.ORG_ID_CLIENTE = NVL(NULL,NDC.ORG_ID_CLIENTE)
AND FCL.ID_REGISTRO = NDC.FAC_ID_FACTURA
AND FCL.CTV_CO_ESTADO_DOCUMENTO = 'EM'
AND FCL.UBG_ID_UBICACION_CLIENTE in (SELECT ID_REGISTRO
FROM S00_UBICACION_GEOGRAFICA
START WITH ID_REGISTRO = nvl(NULL, FCL.UBG_ID_UBICACION_CLIENTE)
CONNECT BY PRIOR ID_REGISTRO = UBG_ID_UBICACION_PADRE)
GROUP BY NDC.CTV_CO_CLASE_ORGANIZACION
,NDC.CTV_DE_CLASE_ORGANIZACION
,NDC.CO_CLIENTE
,NDC.ORG_NB_CLIENTE
,FCL.PER_CO_IDENTIFICACION_VENDEDOR
,FCL.PER_NB_PRIMER_NOMBRE_VENDEDOR||' '||
FCL.PER_NB_PRIMER_APELLIDO_VEND) DEV
,(SELECT RCD .CTV_CO_CLASE_ORGANIZACION CO_CLASE_CLIENTE
,RCD.CTV_DE_CLASE_ORGANIZACION DE_CLASE_CLIENTE
,RCD.CO_ORGANIZACION CO_CLIENTE
,RCD.ORG_NB_DISTRIBUIDOR NB_CLIENTE
,FCL.PER_CO_IDENTIFICACION_VENDEDOR CO_VENDEDOR
,FCL.PER_NB_PRIMER_NOMBRE_VENDEDOR||' '||
FCL.PER_NB_PRIMER_APELLIDO_VEND NB_VENDEDOR
,SUM(RCD.MN_DESCUENTO) MN_DESCUENTO
,SUM(DECODE(SIGN(RCO.MN_COBRADO_ANTES - IVA.MN_IVA)
,-1
,RCD.MN_ABONO - ABS(RCO.MN_COBRADO_ANTES - IVA.MN_IVA)
,RCD.MN_ABONO)) MN_COBRADO
FROM S06_RECIBO_COBRO_DOC_TOTAL_R RCD
,S04_FACTURA_CLIENTE_TOTAL_R FCL
,(SELECT ID_DOCUMENTO_REFERENCIA FAC_ID_FACTURA
,NVL(SUM(MN_DEBITO_CREDITO),0) MN_IVA
FROM S04_DOCUMENTO_DEBITO_CREDITO_R
WHERE TDC_CO_TIPO_DEBITO_CREDITO = SK00_BUSCAR.F_VCT('CO_TIPO_DEBITO_IVA')
GROUP BY ID_DOCUMENTO_REFERENCIA) IVA
,(SELECT ID_REFERENCIA FAC_ID_FACTURA
,NVL(SUM(MN_ABONO),0) MN_COBRADO_ANTES
FROM S06_RECIBO_COBRO_DOC_TOTAL_R
WHERE FE_EMISION < to_date('01112009','ddmmyyyy')
GROUP BY ID_REFERENCIA) RCO
WHERE RCD.CTV_CO_ESTADO_DOCUMENTO = SK00_BUSCAR.F_VCT('CO_ESTADO_DOCUMENTO_EMITIDO')
AND RCD.FE_EMISION BETWEEN to_date('01112009','ddmmyyyy') AND to_date('29112009','ddmmyyyy')
AND RCD.ORG_ID_ORGANIZACION = NVL(NULL,RCD.ORG_ID_ORGANIZACION)
AND FCL.CTV_CO_ESTADO_DOCUMENTO = 'EM'
AND FCL.ID_REGISTRO = RCD.ID_REFERENCIA
AND FCL.UBG_ID_UBICACION_CLIENTE in (SELECT ID_REGISTRO
FROM S00_UBICACION_GEOGRAFICA
START WITH ID_REGISTRO = nvl(NULL, FCL.UBG_ID_UBICACION_CLIENTE)
CONNECT BY PRIOR ID_REGISTRO = UBG_ID_UBICACION_PADRE)
AND IVA.FAC_ID_FACTURA (+) = FCL.ID_REGISTRO
AND RCO.FAC_ID_FACTURA (+) = FCL.ID_REGISTRO
GROUP BY RCD.CTV_CO_CLASE_ORGANIZACION
,RCD.CTV_DE_CLASE_ORGANIZACION
,RCD.CO_ORGANIZACION
,RCD.ORG_NB_DISTRIBUIDOR
,FCL.PER_CO_IDENTIFICACION_VENDEDOR
,FCL.PER_NB_PRIMER_NOMBRE_VENDEDOR||' '||
FCL.PER_NB_PRIMER_APELLIDO_VEND) COB
WHERE VTA.CO_CLIENTE = DEV.CO_CLIENTE (+)
AND VTA.CO_VENDEDOR = DEV.CO_VENDEDOR (+)
AND VTA.CO_CLIENTE = COB.CO_CLIENTE (+)
AND VTA.CO_VENDEDOR = COB.CO_VENDEDOR (+)
ORDER BY VTA.NB_VENDEDOR
,VTA.CO_CLIENTE
Is there a way i can influence the join method on this query ...?
It's an XE DB.
Regards, Luis ...!THIS IS THE PLAN:
SQL> /
Execution Plan
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=79006 Card=1 Bytes
=253)
1 0 SORT (ORDER BY) (Cost=79006 Card=1 Bytes=253)
2 1 HASH JOIN (OUTER) (Cost=79005 Card=1 Bytes=253)
3 2 HASH JOIN (OUTER) (Cost=78538 Card=1 Bytes=211)
4 3 VIEW (Cost=78478 Card=1 Bytes=182)
5 4 HASH (GROUP BY) (Cost=78478 Card=1 Bytes=232)
6 5 FILTER
7 6 HASH JOIN (OUTER) (Cost=78469 Card=1 Bytes=232
8 7 TABLE ACCESS (BY INDEX ROWID) OF 'T04_FACTUR
A_PRODUCTO' (TABLE) (Cost=2 Card=1 Bytes=46)
9 8 NESTED LOOPS (Cost=25 Card=1 Bytes=213)
10 9 VIEW OF 'V04_FACTURA_CLIENTE_TOTAL_R' (V
IEW) (Cost=23 Card=1 Bytes=167)
11 10 NESTED LOOPS (Cost=23 Card=1 Bytes=284
12 11 NESTED LOOPS (OUTER) (Cost=23 Card=1
Bytes=278)
13 12 HASH JOIN (SEMI) (Cost=23 Card=1 B
ytes=272)
14 13 NESTED LOOPS (Cost=17 Card=1 Byt
es=259)
15 14 NESTED LOOPS (Cost=16 Card=1 B
ytes=218)
16 15 NESTED LOOPS (OUTER) (Cost=1
6 Card=1 Bytes=212)
17 16 NESTED LOOPS (Cost=15 Card
=1 Bytes=179)
18 17 NESTED LOOPS (Cost=15 Ca
rd=1 Bytes=173)
19 18 NESTED LOOPS (OUTER) (
Cost=14 Card=1 Bytes=162)
20 19 NESTED LOOPS (OUTER)
(Cost=14 Card=1 Bytes=156)
21 20 NESTED LOOPS (OUTE
R) (Cost=14 Card=1 Bytes=150)
22 21 NESTED LOOPS (OU
TER) (Cost=14 Card=1 Bytes=144)
23 22 NESTED LOOPS (
Cost=14 Card=1 Bytes=105)
24 23 SORT (UNIQUE
) (Cost=2 Card=1 Bytes=13)
25 24 TABLE ACCE
SS (FULL) OF 'T00_GRUPO_DATO_USUARIO_ACTIVO' (TABLE (TEMP))
(Cost=2 Card=1 Bytes=13)
26 23 TABLE ACCESS
(BY INDEX ROWID) OF 'T04_FACTURA' (TABLE) (Cost=11 Card=1 B
ytes=92)
27 26 INDEX (RAN
GE SCAN) OF 'I04_FAC_FE_EMISION' (INDEX) (Cost=10 Card=2)
28 22 TABLE ACCESS (
BY INDEX ROWID) OF 'T03_EMPRESA_SUCURSAL' (TABLE) (Cost=0 Ca
rd=1 Bytes=39)
29 28 INDEX (RANGE
SCAN) OF 'I03_EMS_EMP' (INDEX) (Cost=0 Card=1)
30 21 INDEX (UNIQUE SC
AN) OF 'PK_PRY' (INDEX (UNIQUE)) (Cost=0 Card=1 Bytes=6)
31 20 INDEX (UNIQUE SCAN
) OF 'PK_CAJ' (INDEX (UNIQUE)) (Cost=0 Card=1 Bytes=6)
32 19 INDEX (UNIQUE SCAN)
OF 'PK_PEC' (INDEX (UNIQUE)) (Cost=0 Card=1 Bytes=6)
33 18 TABLE ACCESS (BY INDEX
ROWID) OF 'T00_CONTENIDO_TABLA_VIRTUAL' (TABLE) (Cost=1 Car
d=1 Bytes=11)
34 33 INDEX (UNIQUE SCAN)
OF 'PK_CTV' (INDEX (UNIQUE)) (Cost=0 Card=1)
SORRY EXPLAIN OUTPUT TRUNCATED DUE TO SPACE RESTRICION .....
Any help would be greatly appreciated.
I believe there must be a way to influence on the tha costly HASH JOIN operation
SQL> SPOOL OFF -
Help needed in tuning this query
This is the SQL i would like to tune for performace...
The table structure is given below.
The table has about 2 million rows.
From the second day onwards only around 10% of records will be between Load_Start_Time and Load_End_Time. Among these around 50% will have THAMES_URN_WITH_ROLE_SUFFIX as 'TP%'. At present there are unique and primary key indexes on THAMES_URN_WITH_ROLE_SUFFIX .
I'm sure that we need a b-tree index on STG_UPDATE_DATE_TIME as it is the column with good selectivity.
I'm primarily concerned about the substr, instr and reverese on THAMES_URN_WITH_ROLE_SUFFIX.
Also pls. let me know if the order of predicates is right.
Thanks in advance.
SELECT TPD_STG_TL_SF_LEGAL_OWNER.THAMES_URN, TPD_STG_TL_SF_LEGAL_OWNER.UPDATE_SOURCE, TPD_STG_TL_SF_LEGAL_OWNER.SOURCE_EXTRACT_DATE_TIME, TPD_STG_TL_SF_LEGAL_OWNER.LEGAL_OWNERSHIP_ISSUE_IND, TPD_STG_TL_SF_LEGAL_OWNER.CONTACTABLE_INDICATOR, TPD_STG_TL_SF_LEGAL_OWNER.ADMIN_CONTROL_INDICATOR, TPD_STG_TL_SF_LEGAL_OWNER.BANKRUPTCY_INDICATOR, TPD_STG_TL_SF_LEGAL_OWNER.ASSIGNED_INDICATOR, TPD_STG_TL_SF_LEGAL_OWNER.IN_TRUST_INDICATOR, TPD_STG_TL_SF_LEGAL_OWNER.DIVORCE_CASE_INDICATOR, TPD_STG_TL_SF_LEGAL_OWNER.POA_COP_INDICATOR, TPD_STG_TL_SF_LEGAL_OWNER.CLEANSING_STATUS, TPD_STG_TL_SF_LEGAL_OWNER.CATEGORY
FROM
TPD_STG_TL_SF_LEGAL_OWNER
WHERE
((TPD_STG_TL_SF_LEGAL_OWNER.STG_UPDATE_DATE_TIME > '$$Load_Start_Time'
AND
TPD_STG_TL_SF_LEGAL_OWNER.STG_UPDATE_DATE_TIME <= '$$Load_End_Time')
OR
(TPD_STG_TL_SF_LEGAL_OWNER.TPDB_PROCESSED_IDENTIFIER != 'Y') )
AND
SUBSTR(TPD_STG_TL_SF_LEGAL_OWNER.THAMES_URN_WITH_ROLE_SUFFIX,1,2)='TP'
AND
SUBSTR(REVERSE( TPD_STG_TL_SF_LEGAL_OWNER.THAMES_URN_WITH_ROLE_SUFFIX),INSTR(REVERSE( TPD_STG_TL_SF_LEGAL_OWNER.THAMES_URN_WITH_ROLE_SUFFIX),'-',1)-1,1)!='S'
========================================
CREATE TABLE TPD_STG_TL_SF_LEGAL_OWNER
THAMES_URN VARCHAR2(35 BYTE) NOT NULL,
UPDATE_SOURCE VARCHAR2(3 BYTE),
SOURCE_EXTRACT_DATE_TIME DATE,
LEGAL_OWNERSHIP_ISSUE_IND CHAR(1 BYTE),
CONTACTABLE_INDICATOR CHAR(1 BYTE),
ADMIN_CONTROL_INDICATOR CHAR(1 BYTE),
BANKRUPTCY_INDICATOR CHAR(1 BYTE),
ASSIGNED_INDICATOR CHAR(1 BYTE),
IN_TRUST_INDICATOR CHAR(1 BYTE),
DIVORCE_CASE_INDICATOR CHAR(1 BYTE),
POA_COP_INDICATOR CHAR(1 BYTE),
THAMES_URN_WITH_ROLE_SUFFIX VARCHAR2(39 BYTE),
THAMES_LEGAL_OWNERSHIP_IND CHAR(1 BYTE),
PRODUCT_HOLDING_ROLE_TYPE VARCHAR2(21 BYTE),
OWNERSHIP_SPLIT_PERCENTAGE NUMBER(3),
SOURCE_SYSTEM VARCHAR2(3 BYTE),
TITLE VARCHAR2(50 BYTE),
FIRST_NAME VARCHAR2(50 BYTE),
MIDDLE_INITIAL VARCHAR2(50 BYTE),
SURNAME VARCHAR2(50 BYTE),
GENDER CHAR(1 BYTE),
BIRTH_DATE DATE,
DEATH_INDICATOR CHAR(1 BYTE),
DEATH_RECORD_DATE DATE,
NATIONAL_INSURANCE_NUMBER VARCHAR2(9 BYTE),
GONE_AWAY_INDICATOR CHAR(1 BYTE),
ADDRESS_LINE_1 VARCHAR2(50 BYTE),
ADDRESS_LINE_2 VARCHAR2(50 BYTE),
ADDRESS_LINE_3 VARCHAR2(50 BYTE),
ADDRESS_LINE_4 VARCHAR2(50 BYTE),
ADDRESS_LINE_5 VARCHAR2(50 BYTE),
POST_CODE VARCHAR2(12 BYTE),
COUNTRY VARCHAR2(50 BYTE),
OVERSEAS_ADDRESS_INDICATOR CHAR(1 BYTE),
ORGANISATION_NAME VARCHAR2(50 BYTE),
TPDB_PROCESSED_IDENTIFIER CHAR(2 BYTE),
CLEANSING_STATUS VARCHAR2(30 BYTE),
CATEGORY VARCHAR2(50 BYTE),
SCHEME_NAME VARCHAR2(50 BYTE),
STG_CREATE_DATE_TIME DATE,
STG_UPDATE_DATE_TIME DATE,
LAST_UPDATED_DATE_TIME DATE
TABLESPACE TPDBS01A_DATA
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 128K
NEXT 128K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
CREATE UNIQUE INDEX TPD_STG_TL_SF_LEGAL_OWNER_PK ON TPD_STG_TL_SF_LEGAL_OWNER
(THAMES_URN_WITH_ROLE_SUFFIX)
LOGGING
TABLESPACE TPDBS01A_DATA
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 128K
NEXT 128K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
NOPARALLEL;
ALTER TABLE TPD_STG_TL_SF_LEGAL_OWNER ADD (
CONSTRAINT TPD_STG_TL_SF_LEGAL_OWNER_PK
PRIMARY KEY
(THAMES_URN_WITH_ROLE_SUFFIX)
USING INDEX
TABLESPACE TPDBS01A_DATA
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 128K
NEXT 128K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
));> If indexes don't help, is the only way to gain REAL
performance gain on this type of query is to
partition the table
If a Full Table Scan on a table takes "too long" (and
this is purely subjective - "too long" is different
for every problem) and indexes can't help, and we
need <100% of the rows, and if partitioning will give
us the performance we desire, is it OK do it ? Also
would STG_UPDATE_DATE_TIME be the best column to do a
index partion ?
For this type of query, partitioning on STG_UPDATE_DATE_TIME would be good.
However, partitioning is not done just for one query. It has to fit in your total design. For example, if you are also doing queries with a predicate like <column with a local unique index but not the partition key> = <constant>, it would have to visit all partitions instead of just one, and those queries would take much longer to execute. You can make the index global, but there all kind of maintenance issues with that. In short: be careful about partitioning and think it through first.
> But is it a good option to partition tables with
total no. of rows between 2 million and 5 million ? I
thought partitioning is better done for tables > 20
million.
Please throw some light on that.
Generally, partitioning is done on bigger tables, yes. But it is not about some specific number of rows. You partition a table when all forecasted use of the table is known, so you can make a good judgement which usages will benefit, which ones won't be affected and which ones are likely to suffer. When the benefits outweigh the disadvantages, you partition...
Above I had an example about queries that are going to suffer. Partitioning is beneficial for example when once in some period you'd have to delete A LOT of old rows. Or when you have some data warehousing queries that need like 10% of only the most recent data in a huge table.
The decision is yours.
Regards,
Rob. -
solved need help in tuning this Query
hi frs,
i have created a query like this
pls help
Regards
Rajesh
Message was edited by:
Rajesh.mani
Message was edited by:
Rajesh.maniCode and explain plan should be between [pre] and [/pre] or [code] and [/code] tags like this.
[pre]Code[/pre]An now explain plan
[code]Execution plan
[/code]
Cheers
Sarma. -
Plz help in tuning this query......
SELECT "LAN","VEF_REF_NO","VF_TYPE_CODE","APPLICANT_TYPE","MANDATORY","OPTIONAL","COMPLETE","DT_COMPLETED","REFIRENO","ROLE","USER_ID","DT_LASTUPDATED","TEMPLATEFIRED"
FROM T_VER_STRATEGY_DETAILS M
WHERE VF_TYPE_CODE =1 AND
APPLICANT_TYPE ='A' AND
DT_LASTUPDATED=
(SELECT MAX(DT_LASTUPDATED)
FROM T_VER_STRATEGY_DETAILS
WHERE LAN = M.LAN AND
VF_TYPE_CODE =1 AND APPLICANT_TYPE ='A')
This seems to be a correlated query.
i tried using combined index on
(VF_TYPE_CODE ,APPLICANT_TYPE ,DT_LASTUPDATED)
and another index on
(LAN,VF_TYPE_CODE ,APPLICANT_TYPE ) but the plan or cost remains unchained.
plz help[url http://forums.oracle.com/forums/thread.jspa?threadID=501834&tstart=0]When your query takes too long...
-
Please help me tuning this query...
Hi all,
Can any body suggest some changes (synthatic) so that it can improve its performance... taking too much time...
This is a query used in oracle report...
SELECT distinct cc.seg1,cc.seg2,cc.seg3,cc.seg4,cc.seg5,cc.seg6,cc.seg7,cc.seg8,cc.code_combination_id code_comb_id,
r.flex_validation_rule_name cv_rule,gl.currency_code currency1,
(NVL (gjl.accounted_dr, 0) - NVL (gjl.accounted_cr, 0)) trans_amount,
gjh.doc_sequence_value doc_num,
gjs.user_je_source_name je_source, gjc.user_je_category_name je_category,
fu.user_name last_updated_by,(NVL (gb.begin_balance_dr, 0)
- NVL (gb.begin_balance_cr, 0))
+ (NVL (gb.period_net_dr_beq, 0)
- NVL (gb.period_net_cr_beq, 0)) balance,
gjh.last_update_date last_updated_date,gjl.effective_date
FROM gl_code_combinations cc,
fnd_flex_vdation_rules_vl r,
fnd_flex_validation_rule_lines l,
gl_je_headers gjh,
gl_je_lines gjl,
gl_balances gb,
fnd_user fu,
gl_je_categories gjc,
gl_je_sources gjs,
gl_ledgers gl
WHERE cc.enabled_flag = 'Y'
AND NVL (cc.end_date_active, SYSDATE + 1) > SYSDATE
AND cc.chart_of_accounts_id = :p_chart_of_accounts_id
AND r.id_flex_num = cc.chart_of_accounts_id
AND r.id_flex_code = 'GL#'
AND r.application_id = 101
AND gjs.je_source_name=gjh.je_source
AND gjc.je_category_name=gjh.je_category
AND l.application_id = r.application_id
AND gb.code_combination_id=cc.code_combination_id
AND gjh.period_name=gb.period_name
AND r.enabled_flag = 'Y'
AND NVL (r.end_date_active, SYSDATE + 1) > SYSDATE
AND l.id_flex_code = r.id_flex_code
AND l.id_flex_num = r.id_flex_num
AND l.flex_validation_rule_name = r.flex_validation_rule_name
AND l.include_exclude_indicator = 'E'
AND gjl.code_combination_id = gb.code_combination_id
AND gjh.je_header_id = gjl.je_header_id
AND gjh.status = 'P'
AND gl.ledger_id=gjh.ledger_id
and gl.ledger_id=:p_ledger_id
AND gjh.last_updated_by = fu.user_id
and (gjh.last_update_date,gjl.last_update_date)=(
SELECT MAX (a.last_update_date) ,MAX(b.last_update_date)
FROM gl_je_headers a, gl_je_lines b
WHERE b.code_combination_id = cc.code_combination_id
AND a.je_header_id = b.je_header_id
AND a.status = 'P'
AND ROWNUM = 1)
and (NVL (gjl.accounted_dr, 0) - NVL (gjl.accounted_cr, 0))=(select (NVL (accounted_dr, 0) - NVL (accounted_cr, 0)) from gl_je_lines
where je_header_id=gjh.je_header_id and code_combination_id=cc.code_combination_id and period_name=gjh.period_name and
last_update_date=gjh.last_update_date and rownum=1)
and (NVL (gb.begin_balance_dr, 0)
- NVL (gb.begin_balance_cr, 0))
+ (NVL (gb.period_net_dr_beq, 0)
- NVL (gb.period_net_cr_beq, 0))=(select max((NVL (begin_balance_dr, 0)
- NVL (begin_balance_cr, 0))
+ (NVL (period_net_dr_beq, 0)
- NVL (period_net_cr_beq, 0))) from gl_balances where code_combination_id=cc.code_combination_id
and period_name=gb.period_name)
and gjl.description=(select description from gl_je_lines where code_combination_id=cc.code_combination_id and
je_header_id=gjh.je_header_id and period_name=gb.period_name and rownum=1)
AND cc.seg1 BETWEEN NVL (SUBSTR (l.concatenated_segments_low, 1, 3),
cc.seg1
AND NVL (SUBSTR (l.concatenated_segments_high, 1, 3),
cc.seg1
AND cc.seg2 BETWEEN NVL (SUBSTR (l.concatenated_segments_low, 5, 4),
cc.seg2
AND NVL (SUBSTR (l.concatenated_segments_high, 5, 4),
cc.seg2
AND cc.seg3 BETWEEN NVL (SUBSTR (l.concatenated_segments_low, 10, 4),
cc.segt3
AND NVL (SUBSTR (l.concatenated_segments_high, 10, 4),
cc.seg3
AND cc.seg4 BETWEEN NVL (SUBSTR (l.concatenated_segments_low, 15, 3),
cc.seg4
AND NVL (SUBSTR (l.concatenated_segments_high, 15, 3),
cc.seg4
AND cc.seg5 BETWEEN NVL (SUBSTR (l.concatenated_segments_low, 19, 6),
cc.seg5
AND NVL (SUBSTR (l.concatenated_segments_high, 19, 6),
cc.seg5
AND cc.seg6 BETWEEN NVL (SUBSTR (l.concatenated_segments_low, 26, 4),
cc.segment6
AND NVL (SUBSTR (l.concatenated_segments_high, 26, 4),
cc.seg6
AND cc.seg7 BETWEEN NVL (SUBSTR (l.concatenated_segments_low, 31, 6),
cc.seg7
AND NVL (SUBSTR (l.concatenated_segments_high, 31, 6),
cc.seg7
AND cc.seg8 BETWEEN NVL (SUBSTR (l.concatenated_segments_low, 38, 6),
cc.seg8
AND NVL (SUBSTR (l.concatenated_segments_high, 38, 6),
cc.seg8)Thanks for help
aspDear all,
the folliwing is explain plan for above query...
<ExplainPlan>
- <PlanElement object_ID="0" id="0" operation="SELECT STATEMENT" optimizer="ALL_ROWS" cost="1,417" cardinality="1" bytes="477" cpu_cost="263,995,086" io_cost="1,385" time="18">
- <PlanElements>
- <PlanElement object_ID="0" id="1" operation="HASH" option="UNIQUE" cost="1,417" cardinality="1" bytes="477" cpu_cost="263,995,086" io_cost="1,385" time="18">
- <PlanElements>
- <PlanElement object_ID="0" id="2" operation="FILTER" filter_predicates="("GJH"."LAST_UPDATE_DATE","GJL"."LAST_UPDATE_DATE")= (SELECT MAX("A"."LAST_UPDATE_DATE"),MAX("B"."LAST_UPDATE_DATE") FROM "GL"."GL_JE_LINES" "B","GL"."GL_JE_HEADERS" "A" WHERE ROWNUM=1 AND "A"."JE_HEADER_ID"="B"."JE_HEADER_ID" AND "A"."STATUS"='P' AND "B"."CODE_COMBINATION_ID"=:B1) AND NVL("GJL"."ACCOUNTED_DR",0)-NVL("GJL"."ACCOUNTED_CR",0)= (SELECT NVL("ACCOUNTED_DR",0)-NVL("ACCOUNTED_CR",0) FROM "GL"."GL_JE_LINES" "GL_JE_LINES" WHERE ROWNUM=1 AND "PERIOD_NAME"=:B2 AND "CODE_COMBINATION_ID"=:B3 AND "JE_HEADER_ID"=:B4 AND "LAST_UPDATE_DATE"=:B5) AND NVL("GB"."BEGIN_BALANCE_DR",0)-NVL("GB"."BEGIN_BALANCE_CR",0)+(NVL("GB"."PERIOD_NET_DR_BEQ",0)-NVL("GB"."PERIOD_NET_CR_BEQ",0))= (SELECT MAX(NVL("BEGIN_BALANCE_DR",0)-NVL("BEGIN_BALANCE_CR",0)+(NVL("PERIOD_NET_DR_BEQ",0)-NVL("PERIOD_NET_CR_BEQ",0))) FROM "GL"."GL_BALANCES" "GL_BALANCES" WHERE "PERIOD_NAME"=:B6 AND "CODE_COMBINATION_ID"=:B7)">
- <PlanElements>
- <PlanElement object_ID="0" id="3" operation="NESTED LOOPS" cost="1,262" cardinality="1" bytes="477" cpu_cost="254,376,045" io_cost="1,231" time="16">
- <PlanElements>
- <PlanElement object_ID="0" id="4" operation="NESTED LOOPS" cost="1,261" cardinality="1" bytes="464" cpu_cost="254,366,853" io_cost="1,230" time="16">
- <PlanElements>
- <PlanElement object_ID="0" id="5" operation="NESTED LOOPS" cost="1,260" cardinality="1" bytes="433" cpu_cost="254,357,622" io_cost="1,229" time="16">
- <PlanElements>
- <PlanElement object_ID="0" id="6" operation="NESTED LOOPS" cost="1,259" cardinality="1" bytes="402" cpu_cost="254,348,331" io_cost="1,228" time="16">
- <PlanElements>
- <PlanElement object_ID="0" id="7" operation="NESTED LOOPS" cost="1,258" cardinality="1" bytes="350" cpu_cost="254,337,522" io_cost="1,227" time="16">
- <PlanElements>
- <PlanElement object_ID="0" id="8" operation="NESTED LOOPS" cost="1,239" cardinality="1" bytes="273" cpu_cost="254,166,811" io_cost="1,208" time="15">
- <PlanElements>
- <PlanElement object_ID="0" id="9" operation="HASH JOIN" cost="1,184" cardinality="1" bytes="248" cpu_cost="253,727,112" io_cost="1,153" access_predicates=""B"."ID_FLEX_NUM"="CC"."CHART_OF_ACCOUNTS_ID"" filter_predicates=""CC"."SEGMENT1">=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_LOW",1,3),"CC"."SEGMENT1") AND "CC"."SEGMENT1"<=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_HIGH",1,3),"CC"."SEGMENT1") AND "CC"."SEGMENT2">=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_LOW",5,4),"CC"."SEGMENT2") AND "CC"."SEGMENT2"<=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_HIGH",5,4),"CC"."SEGMENT2") AND "CC"."SEGMENT3">=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_LOW",10,4),"CC"."SEGMENT3") AND "CC"."SEGMENT3"<=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_HIGH",10,4),"CC"."SEGMENT3") AND "CC"."SEGMENT4">=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_LOW",15,3),"CC"."SEGMENT4") AND "CC"."SEGMENT4"<=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_HIGH",15,3),"CC"."SEGMENT4") AND "CC"."SEGMENT5">=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_LOW",19,6),"CC"."SEGMENT5") AND "CC"."SEGMENT5"<=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_HIGH",19,6),"CC"."SEGMENT5") AND "CC"."SEGMENT6">=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_LOW",26,4),"CC"."SEGMENT6") AND "CC"."SEGMENT6"<=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_HIGH",26,4),"CC"."SEGMENT6") AND "CC"."SEGMENT7">=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_LOW",31,6),"CC"."SEGMENT7") AND "CC"."SEGMENT7"<=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_HIGH",31,6),"CC"."SEGMENT7") AND "CC"."SEGMENT8">=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_LOW",38,6),"CC"."SEGMENT8") AND "CC"."SEGMENT8"<=NVL(SUBSTR("L"."CONCATENATED_SEGMENTS_HIGH",38,6),"CC"."SEGMENT8")" time="15">
- <PlanElements>
- <PlanElement object_ID="1" id="10" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="APPLSYS" object_name="FND_FLEX_VALIDATION_RULE_LINES" object_type="TABLE" object_instance="3" cost="3" cardinality="1" bytes="119" cpu_cost="49,909" io_cost="3" filter_predicates=""L"."INCLUDE_EXCLUDE_INDICATOR"='E'" time="1">
- <PlanElements>
- <PlanElement object_ID="0" id="11" operation="NESTED LOOPS" cost="6" cardinality="1" bytes="189" cpu_cost="75,588" io_cost="6" time="1">
- <PlanElements>
- <PlanElement object_ID="0" id="12" operation="NESTED LOOPS" cost="3" cardinality="1" bytes="70" cpu_cost="25,679" io_cost="3" time="1">
- <PlanElements>
- <PlanElement object_ID="0" id="13" operation="NESTED LOOPS" cost="3" cardinality="1" bytes="39" cpu_cost="23,779" io_cost="3" time="1">
- <PlanElements>
- <PlanElement object_ID="2" id="14" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="GL" object_name="GL_LEDGERS" object_type="TABLE" object_instance="10" cost="1" cardinality="1" bytes="8" cpu_cost="8,541" io_cost="1" time="1">
- <PlanElements>
<PlanElement object_ID="3" id="15" operation="INDEX" option="UNIQUE SCAN" optimizer="ANALYZED" object_owner="GL" object_name="GL_LEDGERS_U2" object_type="INDEX (UNIQUE)" search_columns="1" cost="0" cardinality="1" cpu_cost="1,050" io_cost="0" access_predicates=""GL"."LEDGER_ID"=TO_NUMBER(:P_LEDGER_ID)" time="1" />
</PlanElements>
</PlanElement>
- <PlanElement object_ID="4" id="16" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="APPLSYS" object_name="FND_FLEX_VALIDATION_RULES" object_type="TABLE" object_instance="19" cost="2" cardinality="1" bytes="31" cpu_cost="15,238" io_cost="2" filter_predicates=""B"."ENABLED_FLAG"='Y' AND NVL("B"."END_DATE_ACTIVE",SYSDATE@!+1)>SYSDATE@!" time="1">
- <PlanElements>
<PlanElement object_ID="5" id="17" operation="INDEX" option="RANGE SCAN" optimizer="ANALYZED" object_owner="APPLSYS" object_name="FND_FLEX_VALIDATION_RULES_U1" object_type="INDEX (UNIQUE)" search_columns="3" cost="1" cardinality="1" cpu_cost="7,321" io_cost="1" access_predicates=""B"."APPLICATION_ID"=101 AND "B"."ID_FLEX_CODE"='GL#' AND "B"."ID_FLEX_NUM"=TO_NUMBER(:P_CHART_OF_ACCOUNTS_ID)" time="1" />
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
<PlanElement object_ID="6" id="18" operation="INDEX" option="UNIQUE SCAN" optimizer="ANALYZED" object_owner="APPLSYS" object_name="FND_FLEX_VDATION_RULES_TL_U1" object_type="INDEX (UNIQUE)" search_columns="5" cost="0" cardinality="1" bytes="31" cpu_cost="1,900" io_cost="0" access_predicates=""T"."APPLICATION_ID"=101 AND "T"."ID_FLEX_CODE"='GL#' AND "T"."ID_FLEX_NUM"=TO_NUMBER(:P_CHART_OF_ACCOUNTS_ID) AND "B"."FLEX_VALIDATION_RULE_NAME"="T"."FLEX_VALIDATION_RULE_NAME" AND "T"."LANGUAGE"=USERENV('LANG')" time="1" />
</PlanElements>
</PlanElement>
<PlanElement object_ID="7" id="19" operation="INDEX" option="RANGE SCAN" optimizer="ANALYZED" object_owner="APPLSYS" object_name="FND_FLEX_VAL_RULE_LINES_N1" object_type="INDEX" search_columns="4" cost="1" cardinality="41" cpu_cost="16,371" io_cost="1" access_predicates=""L"."APPLICATION_ID"=101 AND "L"."ID_FLEX_CODE"='GL#' AND "L"."ID_FLEX_NUM"=TO_NUMBER(:P_CHART_OF_ACCOUNTS_ID) AND "L"."FLEX_VALIDATION_RULE_NAME"="B"."FLEX_VALIDATION_RULE_NAME"" time="1" />
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
<PlanElement object_ID="8" id="20" operation="TABLE ACCESS" option="FULL" optimizer="ANALYZED" object_owner="GL" object_name="GL_CODE_COMBINATIONS" object_type="TABLE" object_instance="1" cost="1,177" cardinality="1,088" bytes="64,192" cpu_cost="249,419,570" io_cost="1,147" filter_predicates=""CC"."ENABLED_FLAG"='Y' AND "CC"."CHART_OF_ACCOUNTS_ID"=TO_NUMBER(:P_CHART_OF_ACCOUNTS_ID) AND NVL("CC"."END_DATE_ACTIVE",SYSDATE@!+1)>SYSDATE@!" time="15" />
</PlanElements>
</PlanElement>
- <PlanElement object_ID="9" id="21" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="GL" object_name="GL_BALANCES" object_type="TABLE" object_instance="6" cost="55" cardinality="52" bytes="1,300" cpu_cost="439,699" io_cost="55" time="1">
- <PlanElements>
<PlanElement object_ID="10" id="22" operation="INDEX" option="RANGE SCAN" optimizer="ANALYZED" object_owner="GL" object_name="GL_BALANCES_N1" object_type="INDEX" search_columns="1" cost="2" cardinality="52" cpu_cost="25,693" io_cost="2" access_predicates=""GB"."CODE_COMBINATION_ID"="CC"."CODE_COMBINATION_ID"" time="1" />
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
- <PlanElement object_ID="11" id="23" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_LINES" object_type="TABLE" object_instance="5" cost="19" cardinality="40" bytes="3,080" cpu_cost="170,710" io_cost="19" time="1">
- <PlanElements>
<PlanElement object_ID="12" id="24" operation="INDEX" option="RANGE SCAN" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_LINES_N1" object_type="INDEX" search_columns="1" cost="2" cardinality="49" cpu_cost="24,693" io_cost="2" access_predicates=""GJL"."CODE_COMBINATION_ID"="GB"."CODE_COMBINATION_ID"" time="1" />
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
- <PlanElement object_ID="13" id="25" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_HEADERS" object_type="TABLE" object_instance="4" cost="1" cardinality="1" bytes="52" cpu_cost="10,809" io_cost="1" filter_predicates=""GJH"."STATUS"='P' AND "GJH"."LEDGER_ID"=TO_NUMBER(:P_LEDGER_ID) AND "GJH"."PERIOD_NAME"="GB"."PERIOD_NAME"" time="1">
- <PlanElements>
- <PlanElement object_ID="14" id="26" operation="INDEX" option="UNIQUE SCAN" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_HEADERS_U1" object_type="INDEX (UNIQUE)" search_columns="1" cost="0" cardinality="1" cpu_cost="1,950" io_cost="0" access_predicates=""GJH"."JE_HEADER_ID"="GJL"."JE_HEADER_ID"" filter_predicates=""GJL"."DESCRIPTION"= (SELECT "DESCRIPTION" FROM "GL"."GL_JE_LINES" "GL_JE_LINES" WHERE ROWNUM=1 AND "PERIOD_NAME"=:B1 AND "CODE_COMBINATION_ID"=:B2 AND "JE_HEADER_ID"=:B3)" time="1">
- <PlanElements>
- <PlanElement object_ID="0" id="27" operation="COUNT" option="STOPKEY" filter_predicates="ROWNUM=1">
- <PlanElements>
- <PlanElement object_ID="11" id="28" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_LINES" object_type="TABLE" object_instance="15" cost="5" cardinality="1" bytes="62" cpu_cost="39,168" io_cost="5" filter_predicates=""JE_HEADER_ID"=:B1" time="1">
- <PlanElements>
<PlanElement object_ID="12" id="29" operation="INDEX" option="RANGE SCAN" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_LINES_N1" object_type="INDEX" search_columns="2" cost="3" cardinality="4" cpu_cost="22,364" io_cost="3" access_predicates=""CODE_COMBINATION_ID"=:B1 AND "PERIOD_NAME"=:B2" time="1" />
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
- <PlanElement object_ID="15" id="30" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_SOURCES_TL" object_type="TABLE" object_instance="16" cost="1" cardinality="2" bytes="62" cpu_cost="9,291" io_cost="1" time="1">
- <PlanElements>
<PlanElement object_ID="16" id="31" operation="INDEX" option="UNIQUE SCAN" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_SOURCES_TL_U1" object_type="INDEX (UNIQUE)" search_columns="2" cost="0" cardinality="1" cpu_cost="1,900" io_cost="0" access_predicates=""JE_SOURCE_NAME"="GJH"."JE_SOURCE" AND "LANGUAGE"=USERENV('LANG')" time="1" />
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
- <PlanElement object_ID="17" id="32" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_CATEGORIES_TL" object_type="TABLE" object_instance="17" cost="1" cardinality="2" bytes="62" cpu_cost="9,231" io_cost="1" time="1">
- <PlanElements>
<PlanElement object_ID="18" id="33" operation="INDEX" option="UNIQUE SCAN" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_CATEGORIES_TL_U1" object_type="INDEX (UNIQUE)" search_columns="2" cost="0" cardinality="1" cpu_cost="1,900" io_cost="0" access_predicates=""JE_CATEGORY_NAME"="GJH"."JE_CATEGORY" AND "LANGUAGE"=USERENV('LANG')" time="1" />
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
- <PlanElement object_ID="19" id="34" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="APPLSYS" object_name="FND_USER" object_type="TABLE" object_instance="7" cost="1" cardinality="1" bytes="13" cpu_cost="9,191" io_cost="1" time="1">
- <PlanElements>
<PlanElement object_ID="20" id="35" operation="INDEX" option="UNIQUE SCAN" optimizer="ANALYZED" object_owner="APPLSYS" object_name="FND_USER_U1" object_type="INDEX (UNIQUE)" search_columns="1" cost="0" cardinality="1" cpu_cost="1,900" io_cost="0" access_predicates=""GJH"."LAST_UPDATED_BY"="FU"."USER_ID"" time="1" />
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
- <PlanElement object_ID="0" id="36" operation="SORT" option="AGGREGATE" cardinality="1" bytes="33">
- <PlanElements>
- <PlanElement object_ID="0" id="37" operation="COUNT" option="STOPKEY" filter_predicates="ROWNUM=1">
- <PlanElements>
- <PlanElement object_ID="0" id="38" operation="NESTED LOOPS" cost="69" cardinality="49" bytes="1,617" cpu_cost="624,699" io_cost="69" time="1">
- <PlanElements>
- <PlanElement object_ID="11" id="39" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_LINES" object_type="TABLE" object_instance="12" cost="20" cardinality="49" bytes="882" cpu_cost="164,029" io_cost="20" time="1">
- <PlanElements>
<PlanElement object_ID="12" id="40" operation="INDEX" option="RANGE SCAN" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_LINES_N1" object_type="INDEX" search_columns="1" cost="3" cardinality="49" cpu_cost="30,964" io_cost="3" access_predicates=""B"."CODE_COMBINATION_ID"=:B1" time="1" />
</PlanElements>
</PlanElement>
- <PlanElement object_ID="13" id="41" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_HEADERS" object_type="TABLE" object_instance="11" cost="1" cardinality="1" bytes="15" cpu_cost="9,401" io_cost="1" filter_predicates=""A"."STATUS"='P'" time="1">
- <PlanElements>
<PlanElement object_ID="14" id="42" operation="INDEX" option="UNIQUE SCAN" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_HEADERS_U1" object_type="INDEX (UNIQUE)" search_columns="1" cost="0" cardinality="1" cpu_cost="1,900" io_cost="0" access_predicates=""A"."JE_HEADER_ID"="B"."JE_HEADER_ID"" time="1" />
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
- <PlanElement object_ID="0" id="43" operation="COUNT" option="STOPKEY" filter_predicates="ROWNUM=1">
- <PlanElements>
- <PlanElement object_ID="11" id="44" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_LINES" object_type="TABLE" object_instance="13" cost="5" cardinality="1" bytes="33" cpu_cost="39,068" io_cost="5" filter_predicates=""JE_HEADER_ID"=:B1 AND "LAST_UPDATE_DATE"=:B2" time="1">
- <PlanElements>
<PlanElement object_ID="12" id="45" operation="INDEX" option="RANGE SCAN" optimizer="ANALYZED" object_owner="GL" object_name="GL_JE_LINES_N1" object_type="INDEX" search_columns="2" cost="3" cardinality="4" cpu_cost="22,364" io_cost="3" access_predicates=""CODE_COMBINATION_ID"=:B1 AND "PERIOD_NAME"=:B2" time="1" />
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
- <PlanElement object_ID="0" id="46" operation="SORT" option="AGGREGATE" cardinality="1" bytes="25">
- <PlanElements>
- <PlanElement object_ID="9" id="47" operation="TABLE ACCESS" option="BY INDEX ROWID" optimizer="ANALYZED" object_owner="GL" object_name="GL_BALANCES" object_type="TABLE" object_instance="14" cost="6" cardinality="1" bytes="25" cpu_cost="45,399" io_cost="6" time="1">
- <PlanElements>
<PlanElement object_ID="10" id="48" operation="INDEX" option="RANGE SCAN" optimizer="ANALYZED" object_owner="GL" object_name="GL_BALANCES_N1" object_type="INDEX" search_columns="2" cost="3" cardinality="2" cpu_cost="21,964" io_cost="3" access_predicates=""CODE_COMBINATION_ID"=:B1 AND "PERIOD_NAME"=:B2" time="1" />
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
</PlanElements>
</PlanElement>
</ExplainPlan>Sorry this xml generated...
Regards
asp -
Need Help in tuning this query
select CO_PROFILE.CO_NO AS "UEN No.",
CO_PROFILE.CO_NAME AS "Entity Name",
DECODE(CO_PROFILE.CO_TYPE,'A1','PUBLIC COMPANY LIMITED BY SHARES',
'A3','COMPANY LIMITED BY GUARANTEE',
'A4','UNLIMITED PUBLIC COMPANY',
'B1','LIMITED PRIVATE COMPANY',
'B2','LIMITED EXEMPT PRIVATE COMPANY',
'B3','UNLIMITED PRIVATE COMPANY',
'B4','UNLIMITED EXEMPT PRIVATE COMPANY',
'F1','FOREIGN COMPANY REGISTERED IN SINGAPORE') AS "Entity Type",
M_STATUS.STATUS_DESC AS "Entity Status",
PAYMENT_DETAIL.SERVICE_CODE AS "Service Code",
PAYMENT_DETAIL.PAYMENT_CODE AS "Payment Code",
CO_TRANS_MAST.CO_TRANS_ID AS "Transaction Type",
M_PAYMENT_CODE.PAYMENT_DESC AS "Payment Description",
M_PAYMENT_CODE.REVENUE_CODE AS "Revenue Account",
CO_TRANS_MAST.NUM AS "Number Of Transactions",
PAY_NEW.UNIT_AMT AS "Revenue Amount1",
PAY_NEW.FILING_AMT AS "Revenue Amount2",
PAYMENT_DETAIL.UNIT_FEE AS "Unit Cost"
from CO_PROFILE,
M_STATUS,
PAYMENT_DETAIL,
CO_TRANS_MASTER,
(Select COUNT(CO_NO) AS "NUM",CO_TRANS_ID,CO_NO
from CO_TRANS_MASTER
group by CO_NO,CO_TRANS_ID
)CO_TRANS_MAST,
(Select Sum(UNIT_FEE) AS UNIT_AMT,
SUM(FILING_FEE) AS FILING_AMT,
TRANS_NO AS TRANS_NO
from
PAYMENT_DETAIL
group by
TRANS_NO)
PAY_NEW,
M_PAYMENT_CODE
where rownum=1
and CO_PROFILE.CO_STATUS=M_STATUS.STATUS_CODE
and M_STATUS.TRANS_ID='COMP'
and CO_TRANS_MASTER.CO_TRANS_ID=CO_TRANS_MAST.CO_TRANS_ID
and CO_TRANS_MASTER.CO_NO=CO_TRANS_MAST.CO_NO
and PAYMENT_DETAIL.TRANS_NO=CO_TRANS_MASTER.CO_TRANS_NO
and PAY_NEW.TRANS_NO=PAYMENT_DETAIL.TRANS_NO
and CO_TRANS_MAST.CO_NO= CO_PROFILE.CO_NO
and M_PAYMENT_CODE.PAYMENT_CODE=PAYMENT_DETAIL.PAYMENT_CODESomething seems wrong to me with the logical structure of the select.
1) You only get 1 row of output
but you
2) build sums for each trans_no
3) You join the table co_trans_master but at the same time you count over that one. Might be ok to do so, but it seems to be double the work.
Suggestion.
a) Build a select that joins the payment detail table. Then group this select and build the sums.
b) Add the count for the number of transactions to the select clause instead of and extra inline view in the from clause. Maybe as an analytical function if possible. -
Need help in Fine Tuning this query
Hello Gurus,
The below sql's are from Application engine . It runs more than 5 hours to complete . I have fewer knowledge on sql tuning and request to repharse the sql's to perform and complete the program within One hour.
PS_GE_GAPS_INV is going thru Range Scan and TAO table is going for Full Table Scan.
I have indexes on PS_GE_GAPS_INV which is the main table. Iam joining TAO(Temporary table) and Main Table with common keys defined thru Application designer.
Appreciate all your help.
First Sql :
UPDATE PS_GE_GAPS_INV
SET LAST_DTTM_UPDATE = TO_DATE(SYSDATE,'DD-MM-YY-HH24.MI.SS."000000"')
WHERE
(BUSINESS_UNIT,RECONCILE_DT,GE_INVENTORY_SOURC,TAG_NUMBER,ASSET_ID,SERIAL_ID_TR,S
ERIAL_ID,GE_CUSTODIAN_PHY,CUSTODIAN,DEPTID_P,DEPTID,CHARTFIELD2,CHARTFIELD3,GE_GA
P_RULE,SEQUENCENO) IN (
SELECT DISTINCT B.BUSINESS_UNIT
,B.RECONCILE_DT
,B.GE_INVENTORY_SOURC
,B.TAG_NUMBER
,B.ASSET_ID
,B.SERIAL_ID_TR
,B.SERIAL_ID
,B.GE_CUSTODIAN_PHY
,B.CUSTODIAN
,B.DEPTID_P
,B.DEPTID
,B.CHARTFIELD2
,B.CHARTFIELD3
,B.GE_GAP_RULE
,B.SEQUENCENO
FROM PS_GE_GAPS_TAO A
, PS_GE_GAPS_INV B
WHERE A.BUSINESS_UNIT = B.BUSINESS_UNIT
AND (A.RECONCILE_DT = B.RECONCILE_DT
OR (A.RECONCILE_DT IS NULL
AND B.RECONCILE_DT IS NULL))
AND A.GE_GAP_RULE = B.GE_GAP_RULE
AND A.SEQUENCENO = B.SEQUENCENO
AND A.GE_INVENTORY_SOURC = B.GE_INVENTORY_SOURC
AND A.TAG_NUMBER = B.TAG_NUMBER
AND A.ASSET_ID = B.ASSET_ID
AND A.SERIAL_ID_TR = B.SERIAL_ID_TR
AND A.SERIAL_ID = B.SERIAL_ID
AND A.GE_CUSTODIAN_PHY = B.GE_CUSTODIAN_PHY
AND A.CUSTODIAN = B.CUSTODIAN
AND A.DEPTID_P = B.DEPTID_P
AND A.DEPTID = B.DEPTID
AND A.CHARTFIELD2 = B.CHARTFIELD2
AND A.CHARTFIELD3 = B.CHARTFIELD3
AND A.BUSINESS_UNIT = %Bind(BUSINESS_UNIT)
AND A.RECONCILE_DT = %Bind(RECONCILE_DT)
AND A.PROCESS_INSTANCE =%ProcessInstance)
Second Sql :
INSERT INTO PS_GE_GAPS_INV (BUSINESS_UNIT
, RECONCILE_DT
, GE_GAP_RULE
, SEQUENCENO
, GE_INVENTORY_SOURC
, TAG_NUMBER
, ASSET_ID
, SERIAL_ID_TR
, SERIAL_ID
, GE_CUSTODIAN_PHY
, CUSTODIAN
, VENDOR_ID
, DEPTID_P
, DEPTID
, CHARTFIELD2
, CHARTFIELD3
, GE_GAP_STATUS
, CERTMESSAGE
, LAST_DTTM_UPDATE
, COMMENT1
, ASSET_STATUS
, DESCR1
, DESCR
, NAME1_AC
, NAME1
, CATEGORY_DESCR
, CATEGORY
, OPERATING_UNIT_TO
, OPERATING_UNIT
, PROJECT_ID_P
, PROJECT_ID
, PRODUCT_TO
, PRODUCT
, INV_ITEM_ID
, ITEM_FIELD_C30_B
, ITEM_FIELD_C30_C)
SELECT DISTINCT B.BUSINESS_UNIT
, B.RECONCILE_DT
, B.GE_GAP_RULE
, B.SEQUENCENO
, B.GE_INVENTORY_SOURC
, B.TAG_NUMBER
, B.ASSET_ID
, B.SERIAL_ID_TR
, B.SERIAL_ID
, B.GE_CUSTODIAN_PHY
, B.CUSTODIAN
, B.VENDOR_ID
, B.DEPTID_P
, B.DEPTID
, B.CHARTFIELD2
, B.CHARTFIELD3
, B.GE_GAP_STATUS
, B.CERTMESSAGE
, B.LAST_DTTM_UPDATE
, B.COMMENT1
, B.ASSET_STATUS
, B.DESCR1
, B.DESCR
, B.NAME1_AC
, B.NAME1
, B.CATEGORY_DESCR
, B.CATEGORY
, B.OPERATING_UNIT_TO
, B.OPERATING_UNIT
, B.PROJECT_ID_P
, B.PROJECT_ID
, B.PRODUCT_TO
, B.PRODUCT
, B.INV_ITEM_ID
, B.ITEM_FIELD_C30_B
, B.ITEM_FIELD_C30_C
FROM PS_GE_GAPS_TAO B
WHERE B.BUSINESS_UNIT = %Bind(BUSINESS_UNIT)
AND B.RECONCILE_DT =%Bind(RECONCILE_DT)
AND NOT EXISTS (
SELECT 'X'
FROM PS_GE_GAPS_INV A
WHERE B.BUSINESS_UNIT = A.BUSINESS_UNIT
AND (B.RECONCILE_DT = A.RECONCILE_DT
OR (B.RECONCILE_DT IS NULL
AND A.RECONCILE_DT IS NULL))
AND B.GE_GAP_RULE = A.GE_GAP_RULE
AND B.SEQUENCENO = A.SEQUENCENO
AND B.GE_INVENTORY_SOURC = A.GE_INVENTORY_SOURC
AND B.TAG_NUMBER = A.TAG_NUMBER
AND B.ASSET_ID = A.ASSET_ID
AND B.SERIAL_ID_TR = A.SERIAL_ID_TR
AND B.SERIAL_ID = A.SERIAL_ID
AND B.GE_CUSTODIAN_PHY = A.GE_CUSTODIAN_PHY
AND B.CUSTODIAN = A.CUSTODIAN
AND B.DEPTID_P = A.DEPTID_P
AND B.DEPTID = A.DEPTID
AND B.CHARTFIELD2 = A.CHARTFIELD2
AND B.CHARTFIELD3 = A.CHARTFIELD3)
Third Sql :
INSERT INTO PS_GE_GAPST_TAO (BUSINESS_UNIT
, RECONCILE_DT
, GE_GAP_RULE
, SEQUENCENO
, GE_INVENTORY_SOURC
, TAG_NUMBER
, ASSET_ID
, SERIAL_ID_TR
, GE_CUSTODIAN_PHY
, SERIAL_ID
, CUSTODIAN
, DEPTID_P
, DEPTID
, CHARTFIELD2
, CHARTFIELD3
, PROCESS_INSTANCE
, GE_GAP_STATUS
, CERTMESSAGE
, LAST_DTTM_UPDATE
, COMMENT1
, ASSET_STATUS
, DESCR1
, DESCR
, VENDOR_ID
, NAME1_AC
, NAME1
, CATEGORY_DESCR
, CATEGORY
, OPERATING_UNIT_TO
, OPERATING_UNIT
, PROJECT_ID_P
, PROJECT_ID
, PRODUCT_TO
, PRODUCT
, INV_ITEM_ID
, ITEM_FIELD_C30_B
, ITEM_FIELD_C30_C)
SELECT DISTINCT BUSINESS_UNIT
, RECONCILE_DT
, GE_GAP_RULE
, SEQUENCENO
, GE_INVENTORY_SOURC
, TAG_NUMBER
, ASSET_ID
, SERIAL_ID_TR
, GE_CUSTODIAN_PHY
, SERIAL_ID
, CUSTODIAN
, DEPTID_P
, DEPTID
, CHARTFIELD2
, CHARTFIELD3
, %ProcessInstance
, GE_GAP_STATUS
, CERTMESSAGE
, LAST_DTTM_UPDATE
, COMMENT1
, ASSET_STATUS
, DESCR1
, DESCR
, VENDOR_ID
, NAME1_AC
, NAME1
, CATEGORY_DESCR
, CATEGORY
, OPERATING_UNIT_TO
, OPERATING_UNIT
, PROJECT_ID_P
, PROJECT_ID
, PRODUCT_TO
, PRODUCT
, INV_ITEM_ID
, ITEM_FIELD_C30_B
, ITEM_FIELD_C30_C
FROM ps_ge_gaps_inv B
WHERE b.business_unit = %Bind(BUSINESS_UNIT)
AND b.reconcile_dt =%Bind(RECONCILE_DT)
AND NOT EXISTS (
SELECT 'X'
FROM ps_ge_gaps_tao a
WHERE A.BUSINESS_UNIT = B.BUSINESS_UNIT
AND (A.RECONCILE_DT = B.RECONCILE_DT
OR (A.RECONCILE_DT IS NULL
AND B.RECONCILE_DT IS NULL))
AND A.GE_GAP_RULE = B.GE_GAP_RULE
AND A.SEQUENCENO = B.SEQUENCENO
AND A.GE_INVENTORY_SOURC = B.GE_INVENTORY_SOURC
AND A.TAG_NUMBER = B.TAG_NUMBER
AND A.ASSET_ID = B.ASSET_ID
AND A.SERIAL_ID_TR = B.SERIAL_ID_TR
AND A.SERIAL_ID = B.SERIAL_ID
AND A.GE_CUSTODIAN_PHY = B.GE_CUSTODIAN_PHY
AND A.CUSTODIAN = B.CUSTODIAN
AND A.DEPTID_P = B.DEPTID_P
AND A.DEPTID = B.DEPTID
AND A.CHARTFIELD2 = B.CHARTFIELD2
AND A.CHARTFIELD3 = B.CHARTFIELD3 )
Best Regards,
BalaAre the statistics on your temp table up to date?. Either add an %UpdateStats SQL step after loading the temp table, or check the following notes if your database is Oracle and is a relatively current version:
pscbo_stats - Improving Statistics in Oracle RDBMS for PeopleSoft Enterprise [ID 1322888.1]
E-ORA PeopleSoft Enterprise Performance on Oracle 11g Database [ID 1460735.1]
Regards,
Bob -
The tables are very large...
select a.number
from transaction a,
contr c,
directory b
where EXISTS ( SELECT 1
FROM contr D
WHERE D.CSSTATCHNG LIKE '%a'
AND D.SNCODE IN (3386, 3387)
AND D.COID = C.COID)
AND C.CSSTATCHNG LIKE '%a'
AND b.dnid = c.dnid
and a.snumber = b.dnnum
AND a.CDATE = SYSDATE - 90
AND ROWNUM <= 10
I only need 10 rows.
Note: I use Oracle 8.1.7
Thanks!You really should analyze, even if you use a fairly small sample percent, it is usually better than no analyzing.
If the tables are large, you may want to try rephrasing the EXISTS as an IN, something like:
SELECT a.number
FROM transaction a, contr c, directory b
WHERE b.dnid = c.dnid and
a.snumber = b.dnnum AND
c.coid IN (SELECT coid
FROM contr d
WHERE d.csstatchng LIKE '%a' AND
d.sncode IN (3386, 3387)) AND
c.csstatchng LIKE '%a' AND
a.CDATE = SYSDATE - 90 AND
ROWNUM <= 10or perhaps as a join to an in-line view like:
SELECT a.number
FROM transaction a, contr c, directory b,
(SELECT coid FROM contr
WHERE csstatchng LIKE '%a' AND
sncode IN (3386, 3387)) d
WHERE b.dnid = c.dnid and
a.snumber = b.dnnum AND
c.coid = d.coid AND
c.csstatchng LIKE '%a' AND
a.CDATE = SYSDATE - 90 AND
ROWNUM <= 10Although, I can't help feeling that you cuold skip that bit altogether and simply do:
SELECT a.number
FROM transaction a, contr c, directory b
WHERE b.dnid = c.dnid and
a.snumber = b.dnnum AND
c.sncode IN (3386, 3387) AND
c.csstatchng LIKE '%a' AND
a.CDATE = SYSDATE - 90 AND
ROWNUM <= 10HTH
John -
This query is taking a long time:
Hi All,
I need help in tuning this query. The stats are as below:
SQL> show parameter user_dump_dest
NAME TYPE VALUE
user_dump_dest string /opt/app/oracle/diag/rdbms/ebi
zfile/EBIZFILE/trace
SQL> show parameter optimizer
NAME TYPE VALUE
optimizer_capture_sql_plan_baselines boolean FALSE
optimizer_dynamic_sampling integer 2
optimizer_features_enable string 11.2.0.2
optimizer_index_caching integer 0
optimizer_index_cost_adj integer 100
optimizer_mode string ALL_ROWS
optimizer_secure_view_merging boolean TRUE
optimizer_use_invisible_indexes boolean FALSE
optimizer_use_pending_statistics boolean FALSE
optimizer_use_sql_plan_baselines boolean TRUE
SQL> show parameter db_file_multi
NAME TYPE VALUE
db_file_multiblock_read_count integer 128
SQL> show parameter db_block_size
NAME TYPE VALUE
db_block_size integer 8192
SQL> show parameter cursor_sharing
NAME TYPE VALUE
cursor_sharing string EXACT
SQL>
SQL> column sname format a20
SQL> column pname format a20
SQL> column pval2 format a20
SQL>
SQL> select
2 sname, pname, pval1, pval2
3 from
4 sys.aux_stats$;
SNAME PNAME PVAL1 PVAL2
SYSSTATS_INFO STATUS COMPLETED
SYSSTATS_INFO DSTART 11-03-2009 02:33
SYSSTATS_INFO DSTOP 11-03-2009 02:33
SYSSTATS_INFO FLAGS 1
SYSSTATS_MAIN CPUSPEEDNW 714.19791
SYSSTATS_MAIN IOSEEKTIM 10
SYSSTATS_MAIN IOTFRSPEED 4096
SYSSTATS_MAIN SREADTIM
SYSSTATS_MAIN MREADTIM
SYSSTATS_MAIN CPUSPEED
SYSSTATS_MAIN MBRC
SYSSTATS_MAIN MAXTHR
SYSSTATS_MAIN SLAVETHR
13 rows selected.
Elapsed: 00:00:00.03
SQL>
SQL> explain plan for
2 SELECT A.TRANS_NO,
3 A.TRANS_ID,
4 A.REQUEST_IND,
5 A.TRANS_STATUS_IND,
6 A.TRANS_STATUS_DATE,
7 A.DELIVERY_DATE,
8 C.EMAIL_ADDR
9 FROM IIS_TRANS_MASTER A, M_TRANS B, IIS_REQUEST_TRANS C
10 WHERE
11 C.TRANS_NO = A.TRANS_NO
12 AND A.TRANS_STATUS_IND = 'P'
13 AND A.TRANS_ID = B.TRANS_ID
14 AND A.TRANS_ID <> 'I009'
15 AND A.TRANS_ID <> 'NPKG'
16 AND B.TRANS_CO_TYPE = 'I'
17 AND A.TRANS_ID NOT IN
18 ('P012', 'P13B', 'P13C', 'P14B', 'P14C', 'P015')
19 AND B.DEPT = 'IRD'
20 ORDER BY A.CREATED_DATE;
Explained.
Elapsed: 00:00:00.01
SQL>
SQL> set pagesize 1000;
SQL> set linesize 170;
SQL> @/opt/app/oracle/product/11.2.0/rdbms/admin/utlxplp.sql
SQL> Rem
SQL> Rem $Header: utlxplp.sql 23-jan-2002.08:55:23 bdagevil Exp $
SQL> Rem
SQL> Rem utlxplp.sql
SQL> Rem
SQL> Rem Copyright (c) 1998, 2002, Oracle Corporation. All rights reserved.
SQL> Rem
SQL> Rem NAME
SQL> Rem utlxplp.sql - UTiLity eXPLain Parallel plans
SQL> Rem
SQL> Rem DESCRIPTION
SQL> Rem script utility to display the explain plan of the last explain plan
SQL> Rem command. Display also Parallel Query information if the plan happens to
SQL> Rem run parallel
SQL> Rem
SQL> Rem NOTES
SQL> Rem Assume that the table PLAN_TABLE has been created. The script
SQL> Rem utlxplan.sql should be used to create that table
SQL> Rem
SQL> Rem With SQL*plus, it is recomended to set linesize and pagesize before
SQL> Rem running this script. For example:
SQL> Rem set linesize 130
SQL> Rem set pagesize 0
SQL> Rem
SQL> Rem MODIFIED (MM/DD/YY)
SQL> Rem bdagevil 01/23/02 - rewrite with new dbms_xplan package
SQL> Rem bdagevil 04/05/01 - include CPU cost
SQL> Rem bdagevil 02/27/01 - increase Name column
SQL> Rem jihuang 06/14/00 - change order by to order siblings by.
SQL> Rem jihuang 05/10/00 - include plan info for recursive SQL in LE row source
SQL> Rem bdagevil 01/05/00 - make deterministic with order-by
SQL> Rem bdagevil 05/07/98 - Explain plan script for parallel plans
SQL> Rem bdagevil 05/07/98 - Created
SQL> Rem
SQL>
SQL> set markup html preformat on
SQL>
SQL> Rem
SQL> Rem Use the display table function from the dbms_xplan package to display the last
SQL> Rem explain plan. Use default mode which will display only relevant information
SQL> Rem
SQL> select * from table(dbms_xplan.display());
PLAN_TABLE_OUTPUT
Plan hash value: 3822676895
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 38075 | 3123K| | 22550 (2)| 00:04:31 |
| 1 | SORT ORDER BY | | 38075 | 3123K| 3472K| 22550 (2)| 00:04:31 |
|* 2 | HASH JOIN | | 38075 | 3123K| 2120K| 21801 (2)| 00:04:22 |
| 3 | NESTED LOOPS | | | | | | |
| 4 | NESTED LOOPS | | 38075 | 1673K| | 4177 (1)| 00:00:51 |
|* 5 | TABLE ACCESS FULL | M_TRANS | 10 | 80 | | 7 (0)| 00:00:01 |
|* 6 | INDEX RANGE SCAN | IDX_IIS_TRANS_ID | 39401 | | | 109 (3)| 00:00:02 |
|* 7 | TABLE ACCESS BY INDEX ROWID| IIS_TRANS_MASTER | 3940 | 142K| | 3186 (1)| 00:00:39 |
| 8 | TABLE ACCESS FULL | IIS_REQUEST_TRANS | 2114K| 78M| | 12368 (2)| 00:02:29 |
Predicate Information (identified by operation id):
2 - access("C"."TRANS_NO"="A"."TRANS_NO")
5 - filter("B"."DEPT"='IRD' AND "B"."TRANS_CO_TYPE"='I' AND "B"."TRANS_ID"<>'I009' AND
"B"."TRANS_ID"<>'NPKG' AND "B"."TRANS_ID"<>'P012' AND "B"."TRANS_ID"<>'P13B' AND
"B"."TRANS_ID"<>'P13C' AND "B"."TRANS_ID"<>'P14B' AND "B"."TRANS_ID"<>'P14C' AND
"B"."TRANS_ID"<>'P015')
6 - access("A"."TRANS_ID"="B"."TRANS_ID")
filter("A"."TRANS_ID"<>'I009' AND "A"."TRANS_ID"<>'NPKG' AND "A"."TRANS_ID"<>'P012' AND
"A"."TRANS_ID"<>'P13B' AND "A"."TRANS_ID"<>'P13C' AND "A"."TRANS_ID"<>'P14B' AND
"A"."TRANS_ID"<>'P14C' AND "A"."TRANS_ID"<>'P015')
7 - filter("A"."TRANS_STATUS_IND"='P')
29 rows selected.
Elapsed: 00:00:00.02
SQL>
SQL> rollback;
Rollback complete.
Elapsed: 00:00:00.00
SQL>
SQL> rem Set the ARRAYSIZE according to your application
SQL> set autotrace traceonly arraysize 100
SQL>
SQL> alter session set tracefile_identifier = 'mytrace1';
Session altered.
Elapsed: 00:00:00.00
SQL>
SQL> rem if you're using bind variables
SQL> rem define them here
SQL>
SQL> rem variable b_var1 number
SQL> rem variable b_var2 varchar2(20)
SQL>
SQL> rem and initialize them
SQL>
SQL> rem exec :b_var1 := 1
SQL> rem exec :b_var2 := 'DIAG'
SQL> set pagesize 1000;
SQL> set linesize 170;
SQL> alter session set events '10046 trace name context forever, level 8';
Session altered.
Elapsed: 00:00:00.00
SQL> SELECT A.TRANS_NO,
2 A.TRANS_ID,
3 A.REQUEST_IND,
4 A.TRANS_STATUS_IND,
5 A.TRANS_STATUS_DATE,
6 A.DELIVERY_DATE,
7 C.EMAIL_ADDR
8 FROM IIS_TRANS_MASTER A, M_TRANS B, IIS_REQUEST_TRANS C
9 WHERE
10 C.TRANS_NO = A.TRANS_NO
11 AND A.TRANS_STATUS_IND = 'P'
12 AND A.TRANS_ID = B.TRANS_ID
13 AND A.TRANS_ID <> 'I009'
14 AND A.TRANS_ID <> 'NPKG'
15 AND B.TRANS_CO_TYPE = 'I'
16 AND A.TRANS_ID NOT IN
17 ('P012', 'P13B', 'P13C', 'P14B', 'P14C', 'P015')
18 AND B.DEPT = 'IRD'
19 ORDER BY A.CREATED_DATE;
19 rows selected.
Elapsed: 00:00:15.44
Execution Plan
Plan hash value: 3822676895
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 38075 | 3123K| | 22550 (2)| 00:04:31 |
| 1 | SORT ORDER BY | | 38075 | 3123K| 3472K| 22550 (2)| 00:04:31 |
|* 2 | HASH JOIN | | 38075 | 3123K| 2120K| 21801 (2)| 00:04:22 |
| 3 | NESTED LOOPS | | | | | | |
| 4 | NESTED LOOPS | | 38075 | 1673K| | 4177 (1)| 00:00:51 |
|* 5 | TABLE ACCESS FULL | M_TRANS | 10 | 80 | | 7 (0)| 00:00:01 |
|* 6 | INDEX RANGE SCAN | IDX_IIS_TRANS_ID | 39401 | | | 109 (3)| 00:00:02 |
|* 7 | TABLE ACCESS BY INDEX ROWID| IIS_TRANS_MASTER | 3940 | 142K| | 3186 (1)| 00:00:39 |
| 8 | TABLE ACCESS FULL | IIS_REQUEST_TRANS | 2114K| 78M| | 12368 (2)| 00:02:29 |
Predicate Information (identified by operation id):
2 - access("C"."TRANS_NO"="A"."TRANS_NO")
5 - filter("B"."DEPT"='IRD' AND "B"."TRANS_CO_TYPE"='I' AND "B"."TRANS_ID"<>'I009' AND
"B"."TRANS_ID"<>'NPKG' AND "B"."TRANS_ID"<>'P012' AND "B"."TRANS_ID"<>'P13B' AND
"B"."TRANS_ID"<>'P13C' AND "B"."TRANS_ID"<>'P14B' AND "B"."TRANS_ID"<>'P14C' AND
"B"."TRANS_ID"<>'P015')
6 - access("A"."TRANS_ID"="B"."TRANS_ID")
filter("A"."TRANS_ID"<>'I009' AND "A"."TRANS_ID"<>'NPKG' AND "A"."TRANS_ID"<>'P012' AND
"A"."TRANS_ID"<>'P13B' AND "A"."TRANS_ID"<>'P13C' AND "A"."TRANS_ID"<>'P14B' AND
"A"."TRANS_ID"<>'P14C' AND "A"."TRANS_ID"<>'P015')
7 - filter("A"."TRANS_STATUS_IND"='P')
Statistics
23 recursive calls
0 db block gets
164826 consistent gets
74235 physical reads
0 redo size
1839 bytes sent via SQL*Net to client
524 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
19 rows processed
SQL>
SQL> disconnect
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsHi Manik,
1) Not really. Order by may not be required.
2) After gathering the stats, below is the result:
NAME_COL_PLUS_SHOW_PARAM TYPE
VALUE_COL_PLUS_SHOW_PARAM
user_dump_dest string
/opt/app/oracle/diag/rdbms/ebizfile/EBIZFILE/trace
SQL> show parameter optimizer
NAME_COL_PLUS_SHOW_PARAM TYPE
VALUE_COL_PLUS_SHOW_PARAM
Elapsed: 00:00:00.05
SQL> SELECT A.TRANS_NO,
2 A.TRANS_ID,
3 A.REQUEST_IND,
4 A.TRANS_STATUS_IND,
5 A.TRANS_STATUS_DATE,
6 A.DELIVERY_DATE,
7 C.EMAIL_ADDR
8 FROM IIS_TRANS_MASTER A, M_TRANS B, IIS_REQUEST_TRANS C
9 WHERE
10 C.TRANS_NO = A.TRANS_NO
11 AND A.TRANS_STATUS_IND = 'P'
12 AND A.TRANS_ID = B.TRANS_ID
13 AND A.TRANS_ID <> 'I009'
14 AND A.TRANS_ID <> 'NPKG'
15 AND B.TRANS_CO_TYPE = 'I'
16 AND A.TRANS_ID NOT IN
17 ('P012', 'P13B', 'P13C', 'P14B', 'P14C', 'P015')
18 AND B.DEPT = 'IRD'
19 ORDER BY A.CREATED_DATE;
20 rows selected.
Elapsed: 00:00:06.58
Execution Plan
Plan hash value: 3822676895
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 38091 | 3124K| | 22553 (2)| 00:04:31 |
| 1 | SORT ORDER BY | | 38091 | 3124K| 3472K| 22553 (2)| 00:04:31 |
|* 2 | HASH JOIN | | 38091 | 3124K| 2128K| 21804 (2)| 00:04:22 |
| 3 | NESTED LOOPS | | | | | | |
| 4 | NESTED LOOPS | | 38091 | 1673K| | 4180 (1)| 00:00:51 |
|* 5 | TABLE ACCESS FULL | M_TRANS | 10 | 80 | | 7 (0)| 00:00:01 |
|* 6 | INDEX RANGE SCAN | IDX_IIS_TRANS_ID | 39418 | | | 109 (3)| 00:00:02 |
|* 7 | TABLE ACCESS BY INDEX ROWID| IIS_TRANS_MASTER | 3942 | 142K| | 3189 (1)| 00:00:39 |
| 8 | TABLE ACCESS FULL | IIS_REQUEST_TRANS | 2114K| 78M| | 12368 (2)| 00:02:29 |
Predicate Information (identified by operation id):
2 - access("C"."TRANS_NO"="A"."TRANS_NO")
5 - filter("B"."DEPT"='IRD' AND "B"."TRANS_CO_TYPE"='I' AND "B"."TRANS_ID"<>'I009' AND
"B"."TRANS_ID"<>'NPKG' AND "B"."TRANS_ID"<>'P012' AND "B"."TRANS_ID"<>'P13B' AND
"B"."TRANS_ID"<>'P13C' AND "B"."TRANS_ID"<>'P14B' AND "B"."TRANS_ID"<>'P14C' AND
"B"."TRANS_ID"<>'P015')
6 - access("A"."TRANS_ID"="B"."TRANS_ID")
filter("A"."TRANS_ID"<>'I009' AND "A"."TRANS_ID"<>'NPKG' AND "A"."TRANS_ID"<>'P012' AND
"A"."TRANS_ID"<>'P13B' AND "A"."TRANS_ID"<>'P13C' AND "A"."TRANS_ID"<>'P14B' AND
"A"."TRANS_ID"<>'P14C' AND "A"."TRANS_ID"<>'P015')
7 - filter("A"."TRANS_STATUS_IND"='P')
Statistics
17 recursive calls
0 db block gets
158643 consistent gets
49083 physical reads
0 redo size
1917 bytes sent via SQL*Net to client
524 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
20 rows processedI am yet to try the DBMS_SQLTUNE.
Are you able to give me in simplified form the steps in executing this query for the DBMS_SQLTUNE? Thanks! -
Urgent Help required in Tunning this query
I have table ACCOUNT SPONSOR HOMESTORE ASH with more than 30 million rows.
My batch daily need to update or insert into this table from a temporary table TEMP_HSTRALCT. The data for temporary table is populated by below query which selects from two tables TRANSACTION POINTS and REDEMPTIONS.However both these tables are partitioned on date time and is run daily and this is running for hours.
Can anyone please help me on tuning this query
INSERT INTO temp_hstralct
(tmp_n_collector_account_num, tmp_v_location_id,
tmp_v_sponsor_id, tmp_v_source_file_name,
tmp_n_psc_insert_ind, tmp_n_psc_update_ind,
tmp_n_transaction_amount, tmp_n_transaction_points,
tmp_n_acc_insert_ind, tmp_n_ash_insert_ind,
tmp_n_col_insert_ind, tmp_n_check_digit,
tmp_n_collector_issue_num, tmp_n_csl_insert_ind,
tmp_v_offer_code, tmp_n_psa_insert_ind)
SELECT DISTINCT trp_n_collector_account_num account_num,
trp_v_location_id location_id,
trp_v_sponsor_id sponsor_id,
trp_c_creation_user batch_id, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0
FROM transaction_points, ACCOUNT, locations_master,homestores
WHERE hsr_v_accrual_allowed = 'Y'
AND trp_n_collector_account_num = ACCOUNT.acc_n_account_num(+)
AND ( ( ( ACCOUNT.acc_v_account_type = 'C'
OR ACCOUNT.acc_v_account_type IS NULL
AND hsr_v_b2c_accounts = 'Y'
OR ( ACCOUNT.acc_v_account_type = 'B'
AND hsr_v_nfb_accounts = 'Y'
OR ( ACCOUNT.acc_v_account_type = 'H'
AND hsr_v_hybrid_accounts = 'Y'
AND trp_d_creation_date_time BETWEEN SYSDATE-3
AND SYSDATE
AND trp_v_sponsor_id = 'JSAINSBURY'
AND trp_v_location_id =
locations_master.lnm_v_location_id
AND locations_master.lnm_v_partner_id = 'JSAINSBURY'
AND ( ( ( (INSTR
(hsr_v_store_status,
locations_master.lnm_c_location_status
) > 0
AND (INSTR
(hsr_v_store_type,
locations_master.lnm_c_location_type
) > 0
AND hsr_v_homestore_assignment = 'ST'
OR ( ( locations_master.lnm_c_homestore_ind =
'Y'
AND (INSTR
(hsr_v_store_status,
locations_master.lnm_c_location_status
) > 0
AND hsr_v_homestore_assignment = 'HS'
UNION ALL
SELECT DISTINCT rdm_n_collector_account_num account_num,
rdm_v_location_id location_id,
rom_v_supplier_id sponsor_id,
rdm_c_creation_user batch_id, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0
FROM redemption_details,
reward_offer_master,
ACCOUNT,
locations_master,
HOMESTORES
WHERE hsr_v_redemption_allowed = 'Y'
AND rdm_n_collector_account_num = ACCOUNT.acc_n_account_num(+)
AND ( ( ( ACCOUNT.acc_v_account_type = 'C'
OR ACCOUNT.acc_v_account_type IS NULL
AND hsr_v_b2c_accounts = 'Y'
OR ( ACCOUNT.acc_v_account_type = 'B'
AND hsr_v_nfb_accounts = 'Y'
OR ( ACCOUNT.acc_v_account_type = 'H'
AND hsr_v_hybrid_accounts = 'Y'
AND rdm_d_creation_date_time BETWEEN SYSDATE-3
AND SYSDATE
AND rom_v_reward_offer_id = rdm_v_reward_id
AND rom_v_supplier_id = 'JSAINSBURY'
AND rdm_v_location_id =
locations_master.lnm_v_location_id
AND locations_master.lnm_v_partner_id ='JSAINSBURY'
AND ( ( ( (INSTR
(hsr_v_store_status,
locations_master.lnm_c_location_status
) > 0
AND (INSTR
(hsr_v_store_type,
locations_master.lnm_c_location_type
) > 0
AND hsr_v_homestore_assignment = 'ST'
OR ( ( locations_master.lnm_c_homestore_ind =
'Y'
AND (INSTR
(hsr_v_store_status,
locations_master.lnm_c_location_status
) > 0
AND hsr_v_homestore_assignment = 'HS'
);I have copied the explain as it is and can you please try pasting in the text pad.Can you let me know whether parallel hint on this will speed up the select queries.
Plan
INSERT STATEMENT CHOOSECost: 410,815 Bytes: 2,798,394 Cardinality: 15,395
32 UNION-ALL
15 SORT UNIQUE Cost: 177,626 Bytes: 2,105,592 Cardinality: 11,896
14 FILTER
13 HASH JOIN Cost: 177,312 Bytes: 2,105,592 Cardinality: 11,896
2 TABLE ACCESS BY INDEX ROWID LMHOLTP.LOCATIONS_MASTER Cost: 37 Bytes: 23,184 Cardinality: 966
1 INDEX RANGE SCAN NON-UNIQUE LMHOLTP.IX_LOCATIONS_MASTER_3 Cost: 3 Cardinality: 1
12 FILTER
11 HASH JOIN OUTER
8 MERGE JOIN CARTESIAN Cost: 155,948 Bytes: 702,656,660 Cardinality: 4,845,908
3 TABLE ACCESS FULL LMHOLTP.HOMESTORES Cost: 2 Bytes: 104 Cardinality: 1
7 BUFFER SORT Cost: 155,946 Bytes: 198,682,228 Cardinality: 4,845,908
6 PARTITION RANGE ITERATOR Partition #: 12
5 TABLE ACCESS BY LOCAL INDEX ROWID LMHOLTP.TRANSACTION_POINTS Cost: 155,946 Bytes: 198,682,228 Cardinality: 4,845,908 Partition #: 12
4 INDEX RANGE SCAN NON-UNIQUE LMHOLTP.IX_TRANSACTION_POINTS_1 Cost: 24,880 Cardinality: 6,978,108 Partition #: 12
10 PARTITION RANGE ALL Partition #: 15 Partitions accessed #1 - #5
9 TABLE ACCESS FULL LMHOLTP.ACCOUNT Cost: 6,928 Bytes: 68,495,680 Cardinality: 8,561,960 Partition #: 15 Partitions accessed #1 - #5
31 SORT UNIQUE Cost: 233,189 Bytes: 692,802 Cardinality: 3,499
30 FILTER
29 FILTER
28 NESTED LOOPS OUTER
24 HASH JOIN Cost: 226,088 Bytes: 664,810 Cardinality: 3,499
16 TABLE ACCESS FULL LMHOLTP.REWARD_OFFER_MASTER Cost: 8 Bytes: 2,280 Cardinality: 114
23 HASH JOIN Cost: 226,079 Bytes: 8,327,280 Cardinality: 48,984
20 TABLE ACCESS BY INDEX ROWID LMHOLTP.LOCATIONS_MASTER Cost: 37 Bytes: 432 Cardinality: 18
19 NESTED LOOPS Cost: 39 Bytes: 2,304 Cardinality: 18
17 TABLE ACCESS FULL LMHOLTP.HOMESTORES Cost: 2 Bytes: 104 Cardinality: 1
18 INDEX RANGE SCAN NON-UNIQUE LMHOLTP.IX_LOCATIONS_MASTER_3 Cost: 3 Cardinality: 966
22 PARTITION RANGE ITERATOR Partition #: 28
21 TABLE ACCESS FULL LMHOLTP.REDEMPTION_DETAILS Cost: 226,019 Bytes: 261,636,270 Cardinality: 6,229,435 Partition #: 28
27 PARTITION RANGE ITERATOR Partition #: 30
26 TABLE ACCESS BY LOCAL INDEX ROWID LMHOLTP.ACCOUNT Cost: 2 Bytes: 8 Cardinality: 1 Partition #: 30
25 INDEX UNIQUE SCAN UNIQUE LMHOLTP.CO_PK_ACCOUNT Cost: 1 Cardinality: 1 Partition #: 30
Maybe you are looking for
-
Using BAPI's or RFC's to Create a new BI Master Data
Hello SDN Guys. I am trying to create an application to mantain BI master data and would like to know if you can help me to find a specific RFC or BAPI that I can use in VC . The parameter should be the infoobject name and their attributes to be cr
-
Going back and forth in a quiz is not allowed
Hi, I'm using Captivate 3 and I have a question concerning the Quiz settings. The export format for my project would be HTML/Flash and EXE. I want to prepare a simple activity for Kid's where they can listen to a story and have to answer questions af
-
Must NI-DAQmx Configuration Support be included in Application Installer?
Hello. I am using LabVIEW 2012 sp1 with Application Builder and am building an application installer. I have included the LabVIEW run time engine, DAQmx run time engine, and device driver for the USB-6009 that I am using. If I'm including the devic
-
Adding bluetooth to a power mac G4
I"m getting a G4 tower as a back up mac and it does not have bluetooth. The only keyboard I have is the wireless keyboard connected to my macbook. How can I add bluetooth to the G4 so I can use the wireless keyboard with it?
-
Not all selected images open in photoshop
I have lightroom 3 and cs5. When I select images from lightroom and open in photoshop sometimes not all of the selected images open. It might miss a random image or 2 or 3. All the images are clearly highlighted to open and lightroom confirms the cor