帆软所有销量为0的显示为空值_PG存储空值的方式及其思考

本文深入探讨了在PostgreSQL(PG)中如何存储和处理NULL值,包括TupleHead结构、NULL值在data区域的表示、t_bits的设计原理以及表中被DROP的列如何影响NULL值存储。通过实验揭示了PG解析tuple时如何利用t_infomask和t_bits判断列是否为NULL,指出DROP列会导致每个记录携带多余的t_bits,从而可能导致存储膨胀的问题,建议避免频繁DROP列。
摘要由CSDN通过智能技术生成

47d6789319829cb7413e0054d33fd75b.png

在向表里插入数据时,可以指定某一个字段的值为NULL。比如一张表t(i int, j int, k int),我们可以执行insert into t values(8,1,6),也可以执行insert into t values(3,NULL,7)插入一个带有NULL值的记录。这个博客将探讨在PG中存储NULL值的一些技术细节。

NULL值的存储问题

PG中一条tuple分为TupleHead部分和数据部分,上面提到了向表t插入数据的两个例子,这里使用一个图片抛出这个问题:在元组中如何表示这个NULL值?

9f56d5cb16231ed1e00a7cac034d53f5.png

如图中,在没有NULL值的情况下,一个int数据类型可以占满4个字节的空间。但是在有NULL值的情况下,数据库应该如何表示在3和7之间存在一个NULL呢?

PG中NULL值存储方式

我们使用pageinspact工具观察一下,NULL值的存储方式,如下测试:

postgres=# cre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值