Postgresql 如何确定行是否是索引的一部分?

Postgresql 如何确定行是否是索引的一部分?,postgresql,indexing,cardinality,Postgresql,Indexing,Cardinality,我想知道该行是否是postgresql中索引列的一部分 例如: 当我打开表对象时,我会看到我的索引和每个索引的基数 我在表中的行总数是145454,但所有索引的基数都是145300。在我创建的任何索引中,大约有150多行没有索引 我运行下面的查询来查找基数 SELECT relname, relkind, reltuples AS cardinality, relpages FROM pg_class WHERE relname LIKE

我想知道该行是否是postgresql中索引列的一部分

例如: 当我打开表对象时,我会看到我的索引和每个索引的基数

我在表中的行总数是145454,但所有索引的基数都是145300。在我创建的任何索引中,大约有150多行没有索引

我运行下面的查询来查找基数

SELECT relname, 
       relkind, 
       reltuples AS cardinality, 
       relpages 
FROM   pg_class 
WHERE  relname LIKE '%table_name%'; 
有人能解释一下为什么有些行作为索引的一部分被保留下来,以及如何在我的原始表中找到没有索引的150行

我在表中的行总数是145454,但所有索引的基数是145300

这意味着您有154个重复的索引项,因此其中一些154个索引项(或更少)指向多于1行(或更多)。

来自:

出于效率原因,
reltuple
relpages
不会动态更新,因此它们通常包含一些过时的值。它们通过
VACUUM
ANALYZE
和一些DDL命令(如
CREATE INDEX
)进行更新。不扫描整个表格(通常情况下)的
VACUUM
ANALYZE
操作将根据扫描的表格部分增量更新
reltuples
计数,从而得到近似值。在任何情况下,计划者都将缩放其在
pg_class
中找到的值,以匹配当前的物理表大小,从而获得更接近的近似值

换句话说,只要这个数字大致正确,就没有错,也没有什么可担心的。如果它被大范围地关闭(说“203”而不是它的当前值),那么是时候在桌子上发出
真空
分析
作业了


还值得检查的值。如果设置得太低,统计结果将越来越不准确。

行没有索引。另一方面,专栏文章是这样写的。@Antoniosss同意这是我在阐述问题时的错误。是否仍然可以将缺少的行作为索引的一部分进行查找。不存在“缺少的行”。它只是重复的索引项。如果你想这样做,
GOUP BY
索引主题