在阅读了文档之后,我发现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=#
2条答案
按热度按时间bn31dyow1#
ANALYZE
将接受存储在pg_class
系统目录,即(分区或非分区)表、(分区或非分区)索引、外部表、序列、toast表、视图和物化视图。但是,它只处理分区或非分区表和物化视图。这些是收集统计数据有意义的唯一对象。对于所有其他对象类型,您将得到一个类似于您得到的警告,并且该对象将被跳过。
要收集索引列或表达式的统计信息,
ANALYZE
定义索引的表。li9yvcax2#
analyze收集有关表中数据的统计信息(例如不同值的数目、最高值、最低值等等)。
引用手册
analyze收集的统计数据通常包括每列中一些最常见值的列表和显示每列中近似数据分布的直方图。
索引本质上存储表中存储的数据的副本(但以有序方式,适合快速查找)。
因此,与分析表相比,分析索引不会产生任何额外的信息。唯一的例外是基于表达式的索引(因为expressions值不是直接存储在表中),这可能是有意义的。但据我所知,这还没有实现