我已经搜索过,但找不到任何简单、直接的答案。如何检查当前使用的统计目标ANALYZE
?
问问题
9954 次
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 回答