Hi, I have a fairly large table (28 mi rows) that I'm running the following query on: Select col1, col2, col3 from table1 where col1 = 1234 and col2 = 'abcd' It is taking 5 secs to return the results. I've looked at the execution plan. It is using the index on col1 to return the 100 rows that match 1234 and index on col2 to return the 4 mi rows that match 'abcd', then doing merge join between these two results. The merge join is taking 62% and the index seek on col2 is taking 38%. But, when I force an index on the same query as below: Select col1, col2, col3 from table1 (index(nx_col1)) where col1 = 1234 and col2 = 'abcd' It is returning the results in couple of milli seconds. And the execution plan shows a seek on Index and a bookmark lookup, where the bookmark lookup taking 100% of the time. So, my question is why the optimizer is not picking up the second plan (with the bookmark lookup) when it is much faster than the first plan (with the merge join) ? Can you please throw some ideas ?