Usage of DBMS_XPLAN:
explain plan set statement_id = 'skm' for SELECT acct.account_number , acct.status Account_Status , acct.account_established_date , acct.account_termination_date , acct.account_activation_date , asite.bill_to_flag , asite.ship_to_flag , asite.customer_category_code , psite.party_site_name , psite.status Party_Site_Status , psite.start_date_active , psite.end_date_active , loc.address1 || ' ' || loc.address2 address , loc.city , loc.state , loc.postal_code , siteu.site_use_code , siteu.primary_flag , siteu.status site_uses_status , banku.start_date , banku.end_date , banku.primary_flag , bank.bank_account_num , bank.bank_account_name , bank.inactive_date FROM apps.hz_cust_accounts acct , apps.hz_cust_acct_sites_all asite , apps.hz_party_sites psite , apps.hz_locations loc , apps.hz_cust_site_uses_all siteu , apps.ap_bank_account_uses_all banku , apps.ap_bank_accounts_all bank WHERE acct.account_number = :account_number -- in single quotes AND asite.cust_account_id = acct.cust_account_id AND asite.party_site_id = psite.party_site_id AND psite.location_id = loc.location_id AND siteu.cust_acct_site_id = asite.cust_acct_site_id AND banku.customer_site_use_id = siteu.site_use_id AND bank.bank_account_id = banku.external_bank_account_id ORDER BY bank.bank_account_num /Now run following sql statement
set pages 1000
set lines 132
select * from table(dbms_xplan.display('plan_table','skm'));
And you will see something like
PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------- Plan hash value: 3845713369 ---------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 3264 | 299K| 38586 (1)| 00:07:44 | |* 1 | FILTER | | | | | | | 2 | NESTED LOOPS | | | | | | | 3 | NESTED LOOPS | | 3264 | 299K| 38586 (1)| 00:07:44 | | 4 | NESTED LOOPS | | 3264 | 248K| 28788 (1)| 00:05:46 | | 5 | NESTED LOOPS | | 3585 | 213K| 18026 (1)| 00:03:37 | |* 6 | TABLE ACCESS FULL | AP_SUPPLIERS | 2534 | 113K| 9067 (2)| 00:01:49 | |* 7 | TABLE ACCESS BY INDEX ROWID| AP_SUPPLIER_SITES_ALL | 1 | 15 | 4 (0)| 0 |* 8 | INDEX RANGE SCAN | AP_SUPPLIER_SITES_U2 | 1 | | 2 (0)| 00:00:01 |* 9 | TABLE ACCESS BY INDEX ROWID | IBY_EXTERNAL_PAYEES_ALL | 1 | 17 | 3 (0)| 0 |* 10 | INDEX RANGE SCAN | IBY_EXTERNAL_PAYEES_ALL_N7 | 1 | | 2 (0)| 00:00:01 |* 11 | INDEX RANGE SCAN | IBY_EXT_PARTY_PMT_MTHDS_N1 | 1 | | 2 (0)| 00:00:01 | |* 12 | TABLE ACCESS BY INDEX ROWID | IBY_EXT_PARTY_PMT_MTHDS | 1 | 16 | 3 (0)| 00 ---------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(SYSDATE@!-300<=SYSDATE@!-290) 6 - filter("SUP"."END_DATE_ACTIVE" IS NULL AND "SUP"."CREATION_DATE">=SYSDATE@!-300 AND "SUP"."CREATION_DATE"<=SYSDATE@!-290) 7 - filter("SS"."INACTIVE_DATE" IS NULL) 8 - access("SUP"."VENDOR_ID"="SS"."VENDOR_ID") 9 - filter("EPA"."INACTIVE_DATE" IS NULL) 10 - access("SS"."VENDOR_SITE_ID"="EPA"."SUPPLIER_SITE_ID") filter("EPA"."SUPPLIER_SITE_ID" IS NOT NULL) 11 - access("EPA"."EXT_PAYEE_ID"="PPM"."EXT_PMT_PARTY_ID") 12 - filter("PPM"."INACTIVE_DATE" IS NULL) 33 rows selected.For Better looking output, you may run following sql statement
set pages 1000 set lines 132 spool plan.htm select dbms_xplan.display_plan( table_name =>'plan_table' , statement_id => 'skm' , format => 'ALL' , filter_preds => NULL , type => 'HTML' ) from dual / spool offNow open plan.htm in a browser, you will a better layout of query plan.
No comments:
Post a Comment