17

我已经搜索过,但找不到任何简单、直接的答案。如何检查当前使用的统计目标ANALYZE

4

2 回答 2

26

统计目标的设置存储在目录表中的每列中pg_attribute。你可以这样设置:

ALTER TABLE myschama.mytable ALTER mycolumn SET STATISTICS 127;

并像这样检查它:

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

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

我引用手册attstattarget

attstattarget 通过 控制为该列累积的统计信息的详细程度ANALYZE。零值表示不应收集统计信息。负值表示使用系统默认统计目标。正值的确切含义取决于数据类型。对于标量数据类型,attstattarget 既是要收集的“最常见值”的目标数量,也是要创建的直方图 bin 的目标数量。

大胆强调我的。

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

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

在没有实际列名的情况下,序号用于寻址索引列,对应于pg_attribute.attnum

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

该设置实际上只影响下次ANALYZE手动运行或由autovacuum.

于 2013-02-22T23:22:20.273 回答
2

这提供了正在收集的当前统计信息的更清晰视图

SELECT attrelid::regclass, attname, attstattarget FROM pg_attribute WHERE attstattarget >= 0 order by attstattarget desc;
于 2017-03-10T11:14:09.323 回答