Let's say I have table foos
with column thing_id
.
What's the smallest index I could make for these queries?
select count(*) from foos where thing_id is null;
select id from foos where thing_id is null;
Conceptually, we just need the index to keep track of a list of primary keys which match the criteria. Is it possible/useful to create a partial index on... no columns?
I tried this and postgres considered it a syntax error:
create index on foos where thing_id is null;
This did work
create index on foos (thing_id) where thing_id is null;
But will this result in unnecessarily writing the value of thing_id (always NULL) for each row?
CREATE INDEX idx_name ON foos ((thing_id IS NULL), id)
seems to be the most suitable for these queries. Of course you may try alsoCREATE INDEX idx_name ON foos (id) WHERE thing_id IS NULL
.