0

n_distinct在 PostgreSQL 中有多种设置方法吗?这两个似乎都在做同样的事情,但最终在pg_attribute. 这两个命令有什么区别?

alter table my_table alter column my_column set (n_distinct = 500);
alter table my_table alter column my_column set statistics 1000;
select
    c.relname,
    a.attname,
    a.attoptions,
    a.attstattarget
from
    pg_class c
    inner join
    pg_attribute a
        on c.oid = a.attrelid
where
    c.relname = 'my_table'
and
    a.attname = 'my_column'
order by
    c.relname,
    a.attname;
Name         |Value           
-------------|----------------
relname      |my_table       
attname      |my_column         
attoptions   |{n_distinct=500}
attstattarget|1000            
4

1 回答 1

3

这两个似乎都在做同样的事情

你怎么会那么说?这两个命令显然是不同的。两者都与列统计和查询计划有关。但他们做的事情非常不同。

统计目标...

通过 控制为该列累积的统计信息的详细程度ANALYZE。看:

手册中的基础知识。

设置n_distinct是完全不同的东西。这意味着对给定列期望的不同值的数量(或比率)进行硬编码。(但只有在下一个之后才有效ANALYZE。)

dba.SE 上的相关答案以及更多信息n_distinct

于 2021-03-25T03:36:38.887 回答