postgresql 列默认值 与另一个值相同_浅谈PostgreSql数据统计的作用

作者: 高雪玉,中国PG分会志愿者,瀚高软件工程师

03

目录

1概述 2单列统计 3扩展统计 3.1函数依赖统计 3.2N-Distinct统计 3.3MCV Lists统计 3.3.1缺点 3.3.2优点

PART

1

概述

EXPLAIN展示了PostgreSQLPlanner生成的执行计划。Planner需要估计一个查询要检索的行数,这样才能对查询计划做出更好的选择。Planner收集到的数据统计是决定使用哪种规划的重要因素。   统计包含两大类:单列统计和扩展统计。 扩展统计包含以下3类,其中,MCV统计是PG12新增功能。 (1) 函数依赖统计 (2) N-Distinct统计 (3) MCV Lists统计(PG12新增)

33751854f9777006d57c236681adc92d.png                           

创建如下测试表格并插入数据,以便更直观的了解统计功能。
CREATE TABLE test (x int, y int);INSERT INTO test SELECT mod(i,3),mod(i,30) FROM generate_series (1,10000) s(i);ANALYZE test;

PART

2

单列统计

单列统计信息可帮助Planner估算一个查询将返回的行数。

统计信息保存在pg_class和pg_statistics中。pg_class基本上存储了每个表和索引中的项的总数,以及每个表和索引占用的磁盘块数。pg_statistics存储关于每列的统计信息,这些信息将用于估算WHERE字句的选择度,即符合WHERE字句中每个条件的行的比例,比如:列项为空的比例stanullfrac、非空项的平均存储宽度stawidth、第N个槽位的列值,stavaluesN等。 建议手动检查统计信息使用视图 pg_stats ,而非直接访问pg_statistic。相比之下,pg_stats可以被所有用户访问并且字段值更易读。   pg_stats列含义如下:

名称

类型

描述

schemaname

name

模式名

tablename

name

表名

attname

name

列名

inherited

bool

此行是否包括继承子列

null_frac

real

列项中为空的比例

avg_width

integer

列项的平均字节宽度

n_distinct

real

列中可区分值的估计个数

most_common_vals

anyarray

列中最常用值的一个列表

most_common_freqs

real[]

最常用值的频率列表

histogram_bounds

anyarray

将列值划分成大小接近的组的值列表

correlation

real

物理行顺序和列值逻辑顺序之间的统计关联

most_common_elems

anyarray

列值中最经常出现的非空元素列表

most_common_elem_freqs

real[]

最常用元素值的频度列表

elem_count_histogram

real[]

在列值中可区分非空元素值计数的一个直方图

通过查询pg_stats获取test表格中x列统计信息如下:

postgres=# select * from pg_stats where tablename ='test' and attname = 'x';-[ RECORD 1 ]----------+-----------------------schemaname            | publictablename             | testattname               | xinherited             | fnull_frac             | 0avg_width             | 4n_distinct            | 3most_common_vals      | {1,0,2}most_common_freqs     | {0.3334,0.3333,0.3333}histogram_bounds      |correlation           | 0.3332most_common_elems     |most_common_elem_freqs |elem_count_histogram  |

为了使查询计划易于阅读,进行设置关闭每个查询的并行性。

postgres=# set max_parallel_workers_p
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值