当前位置: 首页 > news >正文

天津做app和网站的公司手机百度高级搜索

天津做app和网站的公司,手机百度高级搜索,咸宁网站建设公司,北京工程建设合同备案网站InnoDB页简介 InnoDB是一个将表中的数据存储到磁盘上的存储引擎,所以即使关机后重启我们的数据还是存在的。而真正处理数据的过程是发生在内存中的,所以需要把磁盘中的数据加载到内存中,如果是处理写入或修改请求的话,还需要把内…

InnoDB页简介

InnoDB是一个将表中的数据存储到磁盘上的存储引擎,所以即使关机后重启我们的数据还是存在的。而真正处理数据的过程是发生在内存中的,所以需要把磁盘中的数据加载到内存中,如果是处理写入或修改请求的话,还需要把内存中的内容刷新到磁盘上。而我们知道读写磁盘的速度非常慢,和内存读写差了几个数量级,所以当我们想从表中获取某些记录时,InnoDB存储引擎需要一条一条的把记录从磁盘上读出来么?不,那样会慢死,InnoDB采取的方式是:将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB。也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。

InnoDB行格式

我们平时是以记录为单位来向表中插入数据的,这些记录在磁盘上的存放方式也被称为行格式或者记录格式。设计InnoDB存储引擎的大佬们到现在为止设计了4种不同类型的行格式,分别是Compact、Redundant、Dynamic和Compressed行格式,随着时间的推移,他们可能会设计出更多的行格式,但是不管怎么变,在原理上大体都是相同的。

Compact 行格式

mysql> CREATE TABLE record_format_demo (->     c1 VARCHAR(10),->     c2 VARCHAR(10) NOT NULL,->     c3 CHAR(10),->     c4 VARCHAR(10)-> ) CHARSET=ascii ROW_FORMAT=COMPACT;
Query OK, 0 rows affected (0.03 sec)

在这里插入图片描述

记录的额外信息

变长字段长度列表
在Compact行格式中,把所有变长字段的真实数据占用的字节长度都存放在记录的开头部位,从而形成一个变长字段长度列表,各变长字段数据占用的字节数按照列的顺序逆序存放。

NULL值列表
我们知道表中的某些列可能存储NULL值,如果把这些NULL值都放到记录的真实数据中存储会很占地方,所以Compact行格式把这些值为NULL的列统一管理起来,存储到NULL值列表中,它的处理过程是这样的:

  1. 首先统计表中允许存储NULL的列有哪些。
    我们前面说过,主键列、被NOT NULL修饰的列都是不可以存储NULL值的,所以在统计的时候不会把这些列算进去。比方说表record_format_demo的3个列c1、c3、c4都是允许存储NULL值的,而c2列是被NOT NULL修饰,不允许存储NULL值。

  2. 如果表中没有允许存储 NULL 的列,则 NULL值列表 也不存在了,否则将每个允许存储NULL的列对应一个二进制位,二进制位按照列的顺序逆序排列,二进制位表示的意义如下:

     二进制位的值为1时,代表该列的值为NULL。二进制位的值为0时,代表该列的值不为NULL。
    

因为表record_format_demo有3个值允许为NULL的列,所以这3个列和二进制位的对应关系就是这样:
  在这里插入图片描述

  1. MySQL规定NULL值列表必须用整数个字节的位表示,如果使用的二进制位个数不是整数个字节,则在字节的高位补0。表record_format_demo只有3个值允许为NULL的列,对应3个二进制位,不足一个字节,所以在字节的高位补0,以此类推,如果一个表中有9个允许为NULL,那这个记录的NULL值列表部分就需要2个字节来表示了。

记录头信息
  除了变长字段长度列表、NULL值列表之外,还有一个用于描述记录的记录头信息,它是由固定的5个字节组成。5个字节也就是40个二进制位,不同的位代表不同的意思,如图:
在这里插入图片描述

记录的真实数据

对于record_format_demo表来说,记录的真实数据除了c1、c2、c3、c4这几个我们自己定义的列的数据以外,MySQL会为每个记录默认的添加一些列(也称为隐藏列),具体的列如下:
在这里插入图片描述
这里需要提一下 InnoDB表对主键的生成策略:优先使用用户自定义主键作为主键,如果用户没有定义主键,则选取一个不允许存储 NULL值的Unique键作为主键,如果表中连不允许存储 NULL值Unique键都没有定义的话,则InnoDB会为表默认添加一个名为row_id的隐藏列作为主键。所以我们从上表中可以看出:InnoDB存储引擎会为每条记录都添加 transaction_id 和 roll_pointer 这两个列,但是 row_id 是可选的(在没有自定义主键以及Unique键的情况下才会添加该列)。这些隐藏列的值不用我们操心,InnoDB存储引擎会自己帮我们生成的。

http://www.ds6.com.cn/news/5104.html

相关文章:

  • 自己怎么做外贸批发网站网络营销现状分析
  • 如何做网站窗口百度秒收录软件
  • 建站推荐网站杭州seo推广公司
  • 做网站要学会什么语言seo优化推广工程师招聘
  • 长沙市在建工程项目沈阳百度seo关键词优化排名
  • 公司有网站域名 如何做网站怎样做一个网站
  • 外网设计灵感网站网站优化排名首页
  • 网页设计毕业论文最简单河北网站seo
  • 响应式企业网站设计优化关键词的步骤
  • 哪些网站可以做ppt有什么引流客源的软件
  • 企业做网站都购买域名吗排名优化怎么做
  • 北京网站设计合理刻北京百度公司总部电话
  • 低代码前端开发平台抚顺网站seo
  • 怎么做网赌网站网络营销成功的原因
  • 潍坊做网站软件厦门人才网app
  • 桌子上做嗯啊干爹网站营销模式有哪些
  • 做新得网站可以换到原来得域名嘛宁波怎么优化seo关键词
  • 网站后台如何登录杭州小周seo
  • 网站建设语录信息流广告投放公司
  • 教育网站建设情况报告制作网站的步骤
  • 微信开发者平台在哪手机系统优化工具
  • java做直播网站友情链接交易购买
  • 网站建设外包需要注意哪些优秀软文范例200字
  • 网站建设教程app新闻 今天
  • 家庭网做网站佛山网站建设公司哪家好
  • .tv可以做门户网站不网页开发用什么软件
  • app浏览器源码大全网站emlog友情链接代码
  • web网站开发有什么作用如何分步骤开展seo工作
  • 网站开发必备技能巨量引擎广告投放平台
  • 百度移动网站检测网络广告策划流程有哪些?