品牌 资讯 搭配 材料 时尚 热点 行业 首饰 玉石 行情

26 一行数据中的多个NULL字段值在磁盘上怎么存储?_环球快看

2023-06-20 10:33:18 来源:哔哩哔哩

一行数据中的多个NULL字段值在磁盘上怎么存储?

1、为什么一行数据里的NULL值不能直接存储?

之前我们已经给大家讲了在数据库里一行数据中如果有VARCHAR(10)之类的变长字段,那么他的存储和读取会有什么问题,以及为了解决这个问题,为什么要给磁盘上存储的每一行数据都加入变长字段长度列表。


【资料图】

今天我们继续给大家讲解在磁盘上存储的一行数据里另外一块特殊的数据区域,就是NULL值列表。

这个所谓的NULL值列表,顾名思义,说的就是你一行数据里可能有的字段值是NULL,比如你有一个name字段,他是允许为NULL的,那么实际上在存储的时候,如果你没给他赋值,他这个字段的值就是NULL。

好,那么假设这个字段的NULL值我们在磁盘上存储的时候,就是按照“NULL”这么个字符串来存储,是不是很浪费存储空间?

本来他就是个NULL,说明什么值都没有,你还给他存个“NULL”字符串,你说你这是干什么呢?

所以实际在磁盘上存储数据的时候,一行数据里的NULL值是肯定不会直接按照字符串的方式存放在磁盘上浪费空间的。

2、NULL值是以二进制bit位来存储的

我们接着看,那么NULL值列表在磁盘上到底应该如何存储呢?

很简单,对所有的NULL值,不通过字符串在磁盘上存储,而是通过二进制的bit位来存储,一行数据里假设有多个字段的值都是NULL,那么这多个字段的NULL,就会以bit位的形式存放在NULL值列表中。

现在我们来给大家举个例子,假设你有一张表,他的建表语句如下所示:

CREATE TABLE customer (

name VARCHAR(10) NOT NULL,

address VARCHAR(20),

gender CHAR(1),

job VARCHAR(30),

school VARCHAR(50)

) ROW_FORMAT=COMPACT;

上面那个表就是一个假想出来的客户表,里面有5个字段,分别为name、address、genderjob、school,就代表了客户的姓名、地址、性别、工作以及学校。

其中有4个变长字段,还有一个定长字段,然后第一个name字段是声明了NOT NULL的,就是不能为NULL,其他4个字段都可能是NULL的。

那么现在我们来假设这个表里有如下一行数据,现在来看看,他在磁盘上是怎么来存储的:“jack NULL m NULL xx_school”,他的5个字段里有两个字段都是NULL

3、结合小小案例来思考一行数据的磁盘存储格式

接着我们来思考上面那个表里的那行案例数据,在磁盘上应该如何存储呢,因为他有多个变长字段,还有多个字段允许为NULL。首先我们先回顾一下,一行数据在磁盘上的存储格式应该是下面这样的:

变长字段长度列表 NULL值列表 头信息 column1=value1 column2=value2 ... columnN=valueN

所以先看变长字段长度列表应该放什么东西,他一共有4个变长字段,那么按照我们上次说的,是不是应该按照逆序的顺序,先放school字段的长度,再放job、address、name几个字段的值长度?

说起来是这样,但是其实这里要区分一个问题,那就是如果这个变长字段的值是NULL,就不用在变长字段长度列表里存放他的值长度了,所以在上面那行数据中,只有name和school两个变长字段是有值的,把他们的长度按照逆序放在变长字段长度列表中就可以了,如下所示:

0x09 0x04 NULL值列表 头信息 column1=value1 column2=value2 ... columnN=valueN

接着来看NULL值列表,这个NULL值列表是这样存放的,你所有允许值为NULL的字段,注意,是允许值为NULL,不是说一定值就是NULL了,只要是允许你为NULL的字段,在这里每个字段都有一个二进制bit位的值,如果bit值是1说明是NULL,如果bit值是0说明不是NULL。

比如上面4个字段都允许为NULL,每个人都会有一个bit位,这一行数据的值是“jack NULL m NULL xx_school”,然后其中2个字段是null,2个字段不是null,所以4个bit位应该是:1010

但是实际放在NULL值列表的时候,他是按逆序放的,所以在NULL值列表里,放的是:0101,整体这一行数据看着是下面这样的

0x09 0x04 0101 头信息 column1=value1 column2=value2 ... columnN=valueN

另外就是他实际NULL值列表存放的时候,不会说仅仅是4个bit位,他一般起码是8个bit位的倍数,如果不足8个bit位就高位补0,所以实际存放看起来是如下的:

0x09 0x04 00000101 头信息 column1=value1 column2=value2 ... columnN=valueN

4、磁盘上的一行数据到底如何读取出来的?

我们结合上面的磁盘上的数据存储格式来思考一下,一行数据到底是如何读取出来的呢?

再看上面的磁盘数据存储格式:

0x09 0x04 00000101 头信息 column1=value1 column2=value2 ... columnN=valueN

首先他必然要把变长字段长度列表和NULL值列表读取出来,通过综合分析一下,就知道有几个变长字段,哪几个变长字段是NULL,因为NULL值列表里谁是NULL谁不是NULL都一清二楚。

此时就可以从变长字段长度列表中解析出来不为NULL的变长字段的值长度,然后也知道哪几个字段是NULL的,此时根据这些信息,就可以从实际的列值存储区域里,把你每个字段的值读取出来了。

如果是变长字段的值,就按照他的值长度来读取,如果是NULL,就知道他是个NULL,没有值存储,如果是定长字段,就按照定长长度来读取,这样就可以完美的把你一行数据的值都读取出来了!

5、今日思考题

昨天让大家思考,为什么数据要按照这种紧凑的格式来在磁盘里存储,今天我们不公布答案,再次问大家一个问题,为什么NULL值列表要按照二进制bit位的方式来存储?

他跟直接用NULL字符串的方式来存储,会有多少存储空间的差距呢?

希望大家思考一下这个问题,然后在评论区发表你的思考,和大家一起交流,答案我们后面会公布。

End

专栏版权归公众号儒猿技术窝所有

未经许可不得传播,如有侵权将追究法律责任

标签:

(责任编辑:)

相关文章

26 一行数据中的多个NULL字段值在磁盘上怎么存储?_环球快看

​一行数据中的多个NULL字段值在磁盘上怎么存储?1、为什么一行数据里的N

2023-06-20 10:33:18

环球微动态丨世联赛积分榜大变脸,中国队连掉2位,美国队被日本踢出前三

​本轮的世界女排联赛在今天凌晨的四点钟是全部结束,从昨天下午一直到今

2023-06-20 10:09:09

许军带队赴杭州、苏州开展经贸交流活动

​6月14日至16日,区委副书记、区长许军带队赴杭州、苏州两地开展经贸交

2023-06-20 09:43:32

2023年社保比例单位和个人怎么计算_社保比例是怎么计算的 快看

​1、养老保险:单位每个月缴纳20%,你自己缴纳8%;医疗保险:单位每个月缴纳

2023-06-20 09:00:43

【文化评析】推动文化类节目对传统文化资源的创新性开掘

​【文化评析】作者:郝娴贞(中国传媒大学教师、传媒艺术学博士)近年来

2023-06-20 08:49:16

压力的定义初中物理(压力的定义)

​力的定义初中物理,压力的定义这个问题很多朋友还不知道,来为大家解答

2023-06-20 07:58:19

普瑞眼科(301239):6月19日北向资金减持4.75万股

​6月19日北向资金减持4 75万股普瑞眼科。近5个交易日中,获北向资金增持

2023-06-20 07:12:54

辽源五中和公主岭一中哪个好四平市实验学十九 快看点

​1、辽源五中和公主岭一中哪个好辽宁省城市排名:沈阳市、大连市、鞍山

2023-06-20 06:10:40

ps怎么换证件照背景 ps怎么换背景颜色|今日热搜

​1、PS换背景颜色  方法 步骤  启动photoshopcs5,执行文件-打开命

2023-06-20 05:19:14

江西南昌新建区:农机助力作保障 中稻生产掀高潮 环球头条

​仲夏时节田园美,夏种夏管正当时。眼下正值早稻管理和中稻插秧的关键时

2023-06-20 03:06:29

“数创未来 智能普惠” 中国信保四川分公司首届数字金融服务节暨第四届小微客户服务节开幕

​中国信保四川分公司为企业代表颁发“政策性出口信用保险重点支持‘小巨

2023-06-20 00:41:49

三只松鼠:6月19日公司高管章燎源增持公司股份合计55万股|天天视点

​证券之星讯根据6月19日市场公开信息上市公司公告及交易所披露数据整理

2023-06-19 22:50:32

最终幻想16召唤兽不死鸟技能详情

​可能有许多最终幻想朋友还想知道最终幻想16召唤兽不死鸟技能详情,下面

2023-06-19 22:03:45

蔡天凤葬礼拒收前夫一家人的花圈,方媛在送别现场哭成泪人_天天新消息

​蔡天凤葬礼在大围宝福纪念馆举行,6月18日,蔡天凤娘家人与众多亲友到

2023-06-19 21:15:43

今日热文:女子在餐馆叫嚣“让监督局的老公天天来查”,官方回应

​因就餐时与老板发生冲突,浙江湖州德清县一女子叫嚣“让我老公天天来检

2023-06-19 20:48:28

天天快资讯丨著名经济学家贾康:房地产市场总体稳住了

​贾康:对于房地产行业总体来说,在国家行业政策已经转向为暖风频吹之后

2023-06-19 19:51:40

世界新消息丨6月19日上海期货交易所沪铜期货持仓比例

​本周受端午小长假影响,仅有三个交易日,中下游加工企业积极备库,铜进

2023-06-19 19:20:54

魔兽世界怀旧服急救150以后怎么学_魔兽世界怀旧服中级急救以及高级急救学习方法|今亮点

​欢迎观看本篇文章,小升来为大家解答以上问题。魔兽世界怀旧服急救150

2023-06-19 18:36:16

这条街如何带火汉中!藏不住了

​街区,城市结构基本组成单位,城市地标、消费增长的助推器。不论是淄博

2023-06-19 17:59:39

长电科技面向5G射频功放推出的高密度异构集成SiP解决方案即将在国内大规模量产 环球讯息

​长电科技凭借在SiP封测技术的深厚积累,开发完成面向5G射频功放的SiP解

2023-06-19 17:51:38

天天视点!关于倒满的文案

​1、遗憾千万种,各人皆不同。伤口不管有多重,总有痊愈的一天。但遗憾

2023-06-19 17:03:47

什么是事故的直接原因和间接原因?_事故的主要原因和直接间接原因的区别 世界信息

​1、大家好,我是陌上小桑树,我来回答这个问题。2、在我们的一生之中会

2023-06-19 16:50:35

东微半导(688261)6月19日主力资金净买入39.66万元

​截至2023年6月19日收盘,东微半导(688261)报收于127 67元,下跌1 97%,

2023-06-19 16:14:29

焦点资讯:收评:三大指数小幅收跌 通信设备领涨

​收评:三大指数小幅收跌通信设备领涨

2023-06-19 15:53:49

双色球23070期和值分析推荐

​唯彩看球分享双色球23070期和值分析推荐,查看专家精选胆码、走势图、

2023-06-19 15:22:43

请教高手:如何用SolidWorks_2008制作一个棱台 请附上教程或步骤谢谢!|今日关注

​想必现在有很多小伙伴对于请教高手:如何用SolidWorks2008制作一个棱台

2023-06-19 14:54:59

球迷冲进现场拥抱梅西?计算了小伙的跑步速度后,我愣住了

​虽然整个过程只持续了一分钟,但小伙子的敏捷、极度的愉悦以及球员和保

2023-06-19 14:34:20

龙山县属于哪个省哪个市(龙山县属于哪个市)

​来为大家解答以下的问题,山县属于哪个省哪个市,龙山县属于哪个市这个

2023-06-19 13:54:11

山八珍和海八珍各是什么?(山珍海味还分为上八珍中八珍和下八珍) 天天观焦点

​八珍和海八珍各是什么?,山珍海味还分为上八珍中八珍和下八珍这个问题

2023-06-19 13:12:54

2023南通启东惠民消费助力券怎么领取(启东市惠民家电服务部)_热头条

​在云闪付首页将定位设置为“南通”且用户GPS位置为启东当地,下拉至“

2023-06-19 12:28:41