1> obj has pk
   obj1 has FK but no Index
2> obj has pk
   obj1 has FK and non-unique Index
3> query is changed to retrieve non-indexed columns

4> exec dbms_stats.set_table_stats('PRATAPZ','OBJ1',numrows=>100000000);
   -- NoTE Now both tables are big(simulated)
5> exec dbms_stats.set_table_stats('PRATAPZ','OBJ1',numrows=>100);

This plan step accepts two sets of rows, each from a different table.  A hash table is built using the rows returned by the first child.  Each row returned by the second child is then used to probe the hash table to find row pairs which satisfy a condition specified in the query's WHERE clause.  Note: The Oracle cost-based optimizer will build the hash table using what it thinks is the smaller of the two tables.  It uses the statistics to determine which is smaller, so out of date statistics could cause the optimizer to make the wrong choice.

exec dbms_stats.set_table_stats('PRATAPZ','OBJ1',numrows=>100000000);