如何查看ANALYZE使用的统计目标?

问题描述 投票:0回答:2

如何查看

ANALYZE
当前使用的统计目标?

sql postgresql postgresql-9.2
2个回答
30
投票

统计目标的设置按列存储在目录表中

pg_attribute
。你可以这样设置:

ALTER TABLE myschama.mytable ALTER mycolumn SET STATISTICS 1234;

并像这样检查:

SELECT attstattarget
FROM   pg_attribute
WHERE  attrelid = 'myschama.mytable'::regclass
AND    attname = 'mycolumn';

或者您只需在 pgAdmin 的对象浏览器中查看创建脚本,如果该值与

default_statistics_target
中的默认值不同,则会附加该脚本。

attstattarget

上的手册

attstattarget
控制累积统计数据的详细程度 对于本专栏,请按
ANALYZE
。零值表示没有 应收集统计数据。 负值表示使用 系统默认统计目标。 正数的确切含义 值取决于数据类型。对于标量数据类型,
attstattarget
既是要收集的“最常见值”的目标数量,也是 要创建的直方图箱的目标数量。

粗体强调我的。

普通索引列的统计信息与列统计信息相同,并且在统计表中没有单独的条目。但 Postgres 为索引表达式收集单独的统计数据。这些可以以类似的方式进行调整:

ALTER INDEX myschema.myidx ALTER COLUMN 1 SET STATISTICS 1235;

在没有实际列名的情况下,使用序数来寻址索引列,对应于

pg_attribute.attnum
:

SELECT attstattarget
FROM   pg_attribute
WHERE  attrelid = 'myschama.myidx'::regclass
AND    attnum = 1;

该设置实际上仅影响下次手动或通过

ANALYZE
运行
autovacuum
时的列统计信息。


3
投票

这提供了当前收集的统计数据的更清晰视图

SELECT attrelid::regclass
      ,attname
      ,attstattarget
  FROM pg_attribute 
  WHERE attstattarget >= 0
  ORDER BY attstattarget DESC;
© www.soinside.com 2019 - 2024. All rights reserved.