如何查看
ANALYZE
当前使用的统计目标?
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
。零值表示没有 应收集统计数据。 负值表示使用 系统默认统计目标。 正数的确切含义 值取决于数据类型。对于标量数据类型,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
时的列统计信息。
这提供了当前收集的统计数据的更清晰视图
SELECT attrelid::regclass
,attname
,attstattarget
FROM pg_attribute
WHERE attstattarget >= 0
ORDER BY attstattarget DESC;