索引上的ANALYZE命令在PostgreSQL中返回警告

索引上的ANALYZE命令在PostgreSQL中返回警告,sql,postgresql,Sql,Postgresql,在阅读了文档之后,我发现Analyze是收集关于给定表的信息,这些信息将在稍后由计划人员用于计划查询的执行。 在Oracle中,可以选择分析索引。对于PostgreSQL,ANALYZE命令返回索引警告。我认为索引应该对PostgreSQL同样重要,所以为什么它在PostgreSQL中不受支持。我可能遗漏了一些东西,有人能指出正确的文档,让我更好地理解这一点吗 postgres=# Create table test(empno integer); CREATE TABLE postgres=#

在阅读了文档之后,我发现Analyze是收集关于给定表的信息,这些信息将在稍后由计划人员用于计划查询的执行。 在Oracle中,可以选择分析索引。对于PostgreSQL,ANALYZE命令返回索引警告。我认为索引应该对PostgreSQL同样重要,所以为什么它在PostgreSQL中不受支持。我可能遗漏了一些东西,有人能指出正确的文档,让我更好地理解这一点吗

postgres=# Create table test(empno integer);
CREATE TABLE
postgres=# create index idx_test1 on test(empno );
CREATE INDEX
postgres=# \di idx_test1
                 List of relations
 Schema |   Name    | Type  |  Owner  | Table 
--------+-----------+-------+---------+-------
 public | idx_test1 | index |   Xyz   | test
(1 row)

postgres=# analyze public.idx_test1
postgres-# ;
2020-06-29 16:37:30.665 IST [118434] WARNING:  skipping "idx_test1" --- cannot analyze non-tables or special system tables
WARNING:  skipping "idx_test1" --- cannot analyze non-tables or special system tables
ANALYZE
postgres=# 

ANALYZE收集有关表中数据的统计信息(例如不同值的数量、最高值、最低值等)

ANALYZE收集的统计数据通常包括每列中一些最常见值的列表和显示每列中近似数据分布的直方图

索引本质上存储表中存储的数据的副本(但以有序方式,适合快速查找)


因此,与分析表相比,分析索引不会产生任何附加信息。唯一的例外是基于表达式的索引(因为表达式值不直接存储在表中),这可能是有意义的。然而,据我所知,没有实现的

ANALYZE
将接受存储在
pg_类
系统目录中的任何对象,即(分区或非分区)表、(分区或非分区)索引、外部表、序列、TOAST表、视图和物化视图

但是,它将只处理分区或非分区表和物化视图。这些是收集统计数据有意义的唯一对象。对于所有其他对象类型,您将得到与您得到的类似的警告,并且将跳过该对象


要收集索引列或表达式的统计信息,请分析定义索引的表。

我有点困惑<代码>分析用于表,正如文档非常明确地指出的那样(不是“对象”,而是“表”)<代码>idx_test1不是一个表。因此,没有理由期待
analyze
来处理它。对不起,@GordonLinoff提到“object”是我的错误,我的目的是对analyze有更多的了解。我尝试使用索引的原因是我想检查与Oracle的兼容性。