let's say that you want to check if the creation of a new index will actually be used by the optimizer. Before you create it, you can test whether it will solve your problem through virtual index.
Oracle will create the index in the data dictionary but will not create the index. Nothing will be stored or accessed!
SQL> set autotrace traceonly explain
SQL> select name from emp where name = 'Alex';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=164 Card=1 Bytes=500)
1 0 TABLE ACCESS (FULL) OF 'EMP' (Cost=164 Card=1 Bytes=500)
SQL> create index emp_vir_idx1 on emp(name) nosegment;
Index created.
SQL> set autotrace traceonly explain
SQL> select name from emp where name = 'Alex';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=164 Card=1 Bytes=500)
1 0 TABLE ACCESS (FULL) OF 'EMP' (Cost=164 Card=1 Bytes=500)
SQL> alter session set "_use_nosegment_indexes" = true;
Session altered.
SQL> select name from emp where name = 'Alex';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=500)
1 0 INDEX (RANGE SCAN) OF 'EMP_VIR_IDX1' (NON-UNIQUE) (Cost=1 Card=1 Bytes=500)