Do you know columns in selection list affect use of index on table..??
I couldn't believe this..I was always under impression that query plan is decided based on from and where clause and select clause has no impact on index usage. I was proved wrong in the Smoke Test for INT2 at midnight yesterday..
See how...
select trx_number, org_id, interface_header_attribute1
from ra_customer_trx_all
where org_id = 112
Plan
SELECT STATEMENT ALL_ROWSCost: 1,947 Bytes: 219,538 Cardinality: 9,979
1 TABLE ACCESS FULL TABLE AR.RA_CUSTOMER_TRX_ALL Cost: 1,947 Bytes: 219,538 Cardinality: 9,979
select trx_number, org_id
from ra_customer_trx_all
where org_id = 112
Plan
SELECT STATEMENT ALL_ROWSCost: 551 Bytes: 129,727 Cardinality: 9,979
1 INDEX SKIP SCAN INDEX AR.RA_CUSTOMER_TRX_N1 Cost: 551 Bytes: 129,727 Cardinality: 9,979
Ultimately the solution to this performance issue was add one more table to query... Interesting huh?
bad query
select trx_number
from ra_customer_trx_all
where 1=1
and interface_header_attribute1 = to_char(pin_order_number)
and org_id = v_Header_Rec_Type.org_id
and rownum = 1;
Good query
select trx_number
from apps.ra_customer_trx_all rct, apps.ra_customer_trx_lines_all rctl
where rct.customer_trx_id = rctl.customer_trX_id
and rctl.sales_order = to_char(66000120)
and rct.org_id = 112
and rownum < 2;
I couldn't believe this..I was always under impression that query plan is decided based on from and where clause and select clause has no impact on index usage. I was proved wrong in the Smoke Test for INT2 at midnight yesterday..
See how...
select trx_number, org_id, interface_header_attribute1
from ra_customer_trx_all
where org_id = 112
Plan
SELECT STATEMENT ALL_ROWSCost: 1,947 Bytes: 219,538 Cardinality: 9,979
1 TABLE ACCESS FULL TABLE AR.RA_CUSTOMER_TRX_ALL Cost: 1,947 Bytes: 219,538 Cardinality: 9,979
select trx_number, org_id
from ra_customer_trx_all
where org_id = 112
Plan
SELECT STATEMENT ALL_ROWSCost: 551 Bytes: 129,727 Cardinality: 9,979
1 INDEX SKIP SCAN INDEX AR.RA_CUSTOMER_TRX_N1 Cost: 551 Bytes: 129,727 Cardinality: 9,979
Ultimately the solution to this performance issue was add one more table to query... Interesting huh?
bad query
select trx_number
from ra_customer_trx_all
where 1=1
and interface_header_attribute1 = to_char(pin_order_number)
and org_id = v_Header_Rec_Type.org_id
and rownum = 1;
Good query
select trx_number
from apps.ra_customer_trx_all rct, apps.ra_customer_trx_lines_all rctl
where rct.customer_trx_id = rctl.customer_trX_id
and rctl.sales_order = to_char(66000120)
and rct.org_id = 112
and rownum < 2;
No comments:
Post a Comment