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