假设我有一个foos
带有 column的表thing_id
。
我可以为这些查询创建的最小索引是多少?
select count(*) from foos where thing_id is null;
select id from foos where thing_id is null;
从概念上讲,我们只需要索引来跟踪与条件匹配的主键列表。在...没有列上创建部分索引是否可能/有用?
我试过了,postgres 认为这是一个语法错误:
create index on foos where thing_id is null;
这确实有效
create index on foos (thing_id) where thing_id is null;
但这是否会导致不必要地为每一行写入 thing_id 的值(始终为 NULL)?
您总是需要索引中的一列。
您可以尝试索引一个仅占用一个字节的常量:
如果你选择
boolean
,那就是但我的建议是索引
id
. 当然,这会使索引更大一些,但是您的第二个查询可以使用更快的仅索引扫描。