如果我只关心查询的字段不为空,我是否想要一个索引

eco*_*gic 6 postgresql performance

在 SQL 中,如果我想要查询的所有内容(在 where 条件中)是字段不为空时,是否所有关于索引的常见考虑都适用?

我可以应用索引的特殊配置来涵盖这种特定情况吗?

例如:

select id
from Accesses
where token is not null;
Run Code Online (Sandbox Code Playgroud)

token如果我必须搜索特定的令牌值,是否值得尽可能多地添加索引?

我的数据库是 Postgres。

Erw*_*ter 6

SELECT id FROM accesses WHERE token IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

这个特定查询的完美索引是部分索引

CREATE INDEX accesses_foo_idx ON accesses(id) WHERE token IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

指标条件是重要的部分。
最重要的是,由于您只检索id索引覆盖的内容,因此您可以从中获得仅索引扫描(如果表足够真空)。

有效性随着这种方式从索引中排除的行数(以及表中的列数)而增加。即:特别有益于(在具有更多列的表中)中的少数非空值token

有关的: