Your `sc_id` and `scdate` columns are correlated.
Planner has no such knowledge and assumes columns being independent. Your `scdate` predicate is
estimate to return 14394 rows (based on the EXPLAIN of your first post). I think, that this corresponds to
a quite small portion of your table, less than 1% (based on `Rows Removed by Filter: 4068865` from the
same EXPLAIN). Under uniform distribution, these 14394 rows can be anywhere in the table.
Therefore, reading min values in the order of your PK is optimal, as you're expected to hit a rows that
matches given conditions quite soon.
Problem is — your predicate matches a bunch of rows towards the end of the table, which causes Postgres
to read a big portion of your index before it finds the row that fits.
Right now (9.5 and earlier versions) I do not know of any options that would not require fixing your queries.
P.S. Maybe `Upper pathification` patch, that is being considered for 9.6, can deal with such cases.
Victor Y. Yegorov