"Merlin Moncure" <merlin.moncure@rcsonline.com> writes:
> So, for a table t with a three part key over columns a,b,c, the query to
> read the next value from t for given values a1, b1, c1 is
> select * from t where
> a >= a1 and
> (a > a1 or b >= b1) and
> (a > a1 or b > b1 or c > c1)
> In about 95% of cases, the planner correctly selects the index t(a,b,c)
> and uses it.
I'm surprised it's that good. Why not do
select * from t where a >= a1 and b >= b1 and c >= c1
order by a,b,c
limit 1 offset 1;
which has a much more obvious translation to an indexscan.
regards, tom lane