PostgreSQL的pg_stats学习

前端之家收集整理的这篇文章主要介绍了PostgreSQL的pg_stats学习前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

对于pg_stas,说明文档在这里:

http://www.postgresql.org/docs/9.1/static/view-pg-stats.html

下面做一个实验:

先建立一个表

postgres=# create table test(id integer);
CREATE TABLE
postgres=# \x
Expanded display is on.
postgres=# 

此后,观察 pg_stats 中与test表相关的数据,结果是还没有数据。

postgres=# \d pg_stats;
        View "pg_catalog.pg_stats"
      Column       |   Type   | Modifiers 
-------------------+----------+-----------
 schemaname        | name     | 
 tablename         | 
 attname           | 
 inherited         | boolean  | 
 null_frac         | real     | 
 avg_width         integer  | 
 n_distinct        | 
 most_common_vals  | anyarray | 
 most_common_freqs real[]   | 
 histogram_bounds  | 
 correlation       | 

postgresselect * from pg_stats where tablename='test';
(No rows)

然后,插入两条数据后看看有何变化:

insert into test values(1); INSERT 0 1 postgres'; (No rows) postgres2); 非得anaylize 一下,才可以:

=# analyze; ANALYZE postgres'; -[ RECORD 1 ]---+------- schemaname public tablename | test attname | id inherited | f null_frac | 0 avg_width 4 n_distinct -1 most_common_vals | most_common_freqs | histogram_bounds | {1,2} correlation 1
后,再插入一条数据,进行对比:也是必须得使用analyze后,才会起变化:

可以看到:当表test中只有 1 和 2 两条数据的时候,其 n_distinct 为 -1,表示它们的值现在是唯一的,就是说没有重复值。

此时:

most_common_vals 和 most_common_freqs的值都是空的。

histogram_bounds 的值是 {1,2},正好是刚才输入的值。

当再插入一条 id=2 的记录之后,状况发生了变化:

由于此id列的值不再是unique的了{1,2,2},所以n_distinct 不再是-1了。

由于2出现的最多,所以n_distinct 变为了2 出现的比率: -0.66667,most_common_vals 和 most_common_freqs的值也表明了这一点。

postgres1

postgres---+-----------
schemaname        0.666667
most_common_vals  2}
most_common_freqs 0.666667}
histogram_bounds  | 
correlation       =# 

猜你在找的Postgre SQL相关文章