well, your index is "out of order" -- not very useful -- for this query as you stuck DAY in the middle of it. if rep_p,t_type,stat were on the leading edge, it would make more sense.
I do not understand the spurious reference to VER in the query. what is its purpose -- is this a whittled down example of something else?
Here is an example with a "better" index:
ops$tkyte@ORA920> @test
ops$tkyte@ORA920> /*
DOC>drop table t;
DOC>
DOC>create table t ( t_sid number, day number, ver number, rep_p varchar2(9), t_type varchar2(7), stat varchar2(1) );
DOC>create index t_idx on t(rep_p,t_type,stat,day,t_sid);
DOC>
DOC>insert into t
DOC>select 1, 1, 1, 'SOME TEXT', 'MY_TYPE', 'S'
DOC> from all_objects;
DOC>insert into t
DOC>select 1, 1, 1, 'TEXT', 'MY_TYPE', 'S'
DOC> from all_objects;
DOC>commit;
DOC>*/
ops$tkyte@ORA920>
ops$tkyte@ORA920> set autotrace on
ops$tkyte@ORA920> select rownum, a.* from (
2 SELECT t_sid, day
3 FROM t lt
4 WHERE lt.rep_p = 'SOME TEXT'
5 AND lt.t_type = 'MY_TYPE'
6 AND lt.stat = 'S'
7 UNION
8 SELECT null, null
9 from dual
10 ) a
11 /
ROWNUM T_SID DAY
---------- ---------- ----------
1 1 1
2
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 COUNT
2 1 VIEW
3 2 SORT (UNIQUE)
4 3 UNION-ALL
5 4 INDEX (RANGE SCAN) OF 'T_IDX' (NON-UNIQUE)
6 4 TABLE ACCESS (FULL) OF 'DUAL'
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
239 consistent gets
0 physical reads
0 redo size
524 bytes sent via SQL*Net to client
499 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
2 rows processed
ops$tkyte@ORA920>
ops$tkyte@ORA920> select rownum, a.* from (
2 SELECT t_sid, day
3 FROM (SELECT t_sid ,day ,MAX(ver) AS version
4 FROM ((SELECT lt.t_sid, lt.day, lt.ver
5 FROM t lt
6 WHERE lt.rep_p = 'SOME TEXT'
7 AND lt.t_type = 'MY_TYPE'
8 AND lt.stat = 'S')
9 UNION ALL
10 (SELECT NULL AS t_sid, NULL AS day, NULL AS ver
11 FROM sys.dual)
12 )
13 GROUP BY t_sid, day)
14 ) a
15 /
ROWNUM T_SID DAY
---------- ---------- ----------
1
2 1 1
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 COUNT
2 1 VIEW
3 2 SORT (GROUP BY)
4 3 VIEW
5 4 UNION-ALL
6 5 TABLE ACCESS (BY INDEX ROWID) OF 'T'
7 6 INDEX (RANGE SCAN) OF 'T_IDX' (NON-UNIQUE)
8 5 TABLE ACCESS (FULL) OF 'DUAL'
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
393 consistent gets
0 physical reads
0 redo size
524 bytes sent via SQL*Net to client
499 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
2 rows processed
ops$tkyte@ORA920> set autotrace off
ops$tkyte@ORA920>