> default_statistics_target = 100 (tried with 500, no change). Vacuum > analyzed > before initial query, and after each change to default_statistics_target.
Modifying the statistics target is useful only if the estimates are seriously off, which is not your case - so it won't help, at least not reliably.
> The same query, with a different "ofid", will occasionally get the more > optimal plan -- I assume that the distribution of data is the > differentiator > there.
Yes, the difference between costs of the two plans is quite small (11796 vs. 13153) so it's very sensible to data distribution.
> Is there any other data I can provide to shed some light on this?
You may try to play with the 'cost' constants - see this:
You just need to modify them so that the bitmap index scan / bitmap heap scan is prefered to plain index scan.
Just be careful - if set in the postgresql.conf, it affects all the queries and may cause serious problems with other queries. So it deserves proper testing ...
regards Tomas
Playing around with seq_page_cost (1) and random_page_cost (1), I can get the correct index selected. Applying those same settings to our production server does not produce the optimal plan, though.