<jacob@aers.ca> writes:
> the data is insert once, read many so we should be fine on that side.
It's not only the insert side where you pay for so many partial indexes.
On every query of the table, the planner is going to examine every one
of those indexes and determine whether the index is potentially usable.
Which means it attempts to prove the truth of the index WHERE clause
given the query WHERE conditions. Most of those proof attempts are going
to fail for most queries, but not before eating a lot of planning
cycles.
On a read-mostly table, it'd probably be better to just eat the index
space needed to index the NULL entries. They aren't going to affect
search speed noticeably for non-NULL entries, I think.
regards, tom lane