Have simulated my steps on a test system but the case where no data is returned by the statement doesnt recurr. Have appended the spool:
SQL> select count(A.TAB_TD_SYS_ID)
2 from TAB_OS B,
3 TAB_os A, TAB_CUR_TRANS_DETAIL G
4 where G.TD_FLEX_02 = 'value1'
5 AND G.TD_FLEX_05 = 'B' -- COMMISSIONS
6 AND NVL(G.TD_FLEX_03,'X') = 'value2'
7 AND A.TAB_TD_SYS_ID = G.TD_SYS_ID
8 AND NVL(A.TAB_TYPE,'Z') IN ('P','Z')
9 AND B.TAB_REF_KEY_NO (+) = A.TAB_KEY_NO
10 /
COUNT(A.TAB_TD_SYS_ID)
----------------------
1
SQL> CREATE INDEX TAB_TD_SYS_ID_IDX ON TAB_OS(TAB_TD_SYS_ID) ;
Index created.
SQL> select count(A.TAB_TD_SYS_ID)
2 from TAB_OS B,
3 TAB_os A, TAB_CUR_TRANS_DETAIL G
4 where G.TD_FLEX_02 = 'value1'
5 AND G.TD_FLEX_05 = 'B' -- COMMISSIONS
6 AND NVL(G.TD_FLEX_03,'X') = 'value2'
7 AND A.TAB_TD_SYS_ID = G.TD_SYS_ID
8 AND NVL(A.TAB_TYPE,'Z') IN ('P','Z')
9 AND B.TAB_REF_KEY_NO (+) = A.TAB_KEY_NO
10 /
COUNT(A.TAB_TD_SYS_ID)
----------------------
1
SQL> select index_name, column_name, column_position
2 from user_ind_columns
3 where table_name = 'TAB_OS'
4 order by index_name
5 /
INDEX_NAME
------------------------------
COLUMN_NAME
----------------------------------------------------------------------------------------------------
COLUMN_POSITION
---------------
TAB_TD_SYS_ID_IDX
TAB_TD_SYS_ID
1
PK_TAB_01
TAB_KEY_NO
1
SQL> SPOOL OFF
Havent tried it on the live system coz the create index command timed out