Below is a statement and the generated explain plan:
UPDATE WIE_MATERIAL_TRANSACTIONS_INT WMTI
SET WMTI.INTERFACE_STATUS_CODE=:B4 ,
LAST_UPDATED_BY =FND_GLOBAL.WHO_USER_NAME,
LAST_UPDATE_DATE =SYSDATE,
INV_TRANSACTION_ID =
(SELECT TRANSACTION_ID
FROM INV_MATERIAL_TXNS IMT
WHERE IMT.TRANSACTION_SET_ID =WMTI.INV_TRANSACTION_HEADER_ID
AND IMT.ORIGINAL_TRANSACTION_TEMP_ID=WMTI.INV_TRANSACTION_INTERFACE_ID
AND IMT.ORGANIZATION_ID =WMTI.ORGANIZATION_ID
AND IMT.INVENTORY_ITEM_ID =WMTI.INVENTORY_ITEM_ID
AND IMT.TRANSACTION_SOURCE_ID =WMTI.WORK_ORDER_ID
AND IMT.TRANSACTION_SOURCE_TYPE_ID =:B5
),
WORKER_ID =NVL(WORKER_ID,:B3 )
WHERE WMTI.INTERFACE_STATUS_CODE =:B2
AND WMTI.INV_TRANSACTION_HEADER_ID=:B1
AND EXISTS
(SELECT NULL
FROM INV_MATERIAL_TXNS IMT
WHERE IMT.TRANSACTION_SET_ID =WMTI.INV_TRANSACTION_HEADER_ID
AND IMT.ORIGINAL_TRANSACTION_TEMP_ID=WMTI.INV_TRANSACTION_INTERFACE_ID
AND IMT.ORGANIZATION_ID =WMTI.ORGANIZATION_ID
AND IMT.INVENTORY_ITEM_ID =WMTI.INVENTORY_ITEM_ID
AND IMT.TRANSACTION_SOURCE_ID =WMTI.WORK_ORDER_ID
AND IMT.TRANSACTION_SOURCE_TYPE_ID =:B5
);
Explain Plan:

The indexes definition are as follows:
select * from dba_ind_columns where table_name='INV_MATERIAL_TXNS'
and index_name in ('INV_MATERIAL_TXNS_N12','INV_MATERIAL_TXNS_N1');
| Index_Name | Table_Name | Column_Name |
| INV_MATERIAL_TXNS_N12 | INV_MATERIAL_TXNS | TRANSACTION_SET_ID |
| INV_MATERIAL_TXNS_N1 | INV_MATERIAL_TXNS | INVENTORY_ITEM_ID |
| INV_MATERIAL_TXNS_N1 | INV_MATERIAL_TXNS | ORGANIZATION_ID |
| INV_MATERIAL_TXNS_N1 | INV_MATERIAL_TXNS | TRANSACTION_DATE |
My questions are as follows:
- In the 'Update' statement, I am referring INV_MATERIAL_TXNS twice - one under 'UPDATE' and the other in EXISTS query. Which one is using the index 'INV_MATERIAL_TXNS_N1'?
- Though the queries in the EXISTS and the update seem identical, whey is the index 'INV_MATERIAL_TXNS_N1' being used? Should it not refer the same index 'INV_MATERIAL_TXNS_N12'?
Thank you.