InnoDB基础[亲测有效]

InnoDB基础[亲测有效]在InnoDB中,数据存储在磁盘上,处理数据时需要先将数据从磁盘读取,再写到内存。InnoDB采用局部性原理加载。 一、局部性原理 从磁盘读取数据时,不需要一行一行读取,而是以页为单位读取,操作系统中

InnoDB基础

  在InnoDB中,数据存储在磁盘上,处理数据时需要先将数据从磁盘读取,再写到内存。InnoDB采用局部性原理加载。

一、局部性原理
  从磁盘读取数据时,不需要一行一行读取,而是以页为单位读取,操作系统中一页4kb,InnoDB中一页16kb。
 
二、InnoDB页结构
  页是InnoDB管理存储空间的基本单位,一个页的大小默认是16KB。

三、InnoDB行格式

  一行记录可以以不同的格式存在InnoDB中,行格式分别是Compact、Redundant、Dynamic和Compressed行格式。

  我们可以在创建或修改表的语句中指定行格式:

    CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称
    ALTER TABLE 表名 ROW_FORMAT=行格式名称

1、Compact行格

   InnoDB基础[亲测有效]

    (1)变长字段长度列表

  MySQL支持一些变长的数据类型,比如VARCHAR(M)、VARBINARY(M)、TEXT类型,BLOB类型,这些数据类型修饰列称为变长字段。变长字段长度列表即所有变长字段的真实数据占用的字节长度构成的列表。

  VARCHAR(M),M代表最大能存多少个字符。

  (2)NULL标志位(列表)
  Compact行格式会把可以值为NULL的列统一管理起来,存一个二进制标记(1为NULL,0不为NULL)在NULL标志位中,如果表中没有允许存储 NULL 的列,则 NULL值列表也不存在了。 

   如:第一行没有null:11111

    第二行前三位null:22 (null标志位:11100)

  (3)记录头信息

    记录头信息用于描述记录,它是由固定的5个字节组成。 5个字节也就是40个二进制位,不同的位代表不同的意思,如图: 

    InnoDB基础[亲测有效]

  (4)记录的真实数据 

    记录的真实数据除了我们自己定义的列的数据以外,还会有三个隐藏列:

代码100分

    InnoDB基础[亲测有效]

2.行溢出数据

 VARCHAR(M)类型的列最多可以占用65535个字节。 如果我们使用 ascii字符集的话,一个字符就代表一个字节。但是VARCHAR(65535)会报错:  

  InnoDB基础[亲测有效]

 

  原因:存储一个VARCHAR(M)类型的列,其实需要占用3部分存储空间: 1. 真实数据 2. 变长字段真实数据的长度 3. NULL值标识 

  因此,如果该VARCHAR类型的列没有NOT NULL属性,那最多只能存储65532个字节的数据,因为变长字段的长度占用 2个字节,NULL值标识需要占用1个字节。 

 3.行过长导致的页溢出

  一个页的大小一般是16KB,也就是16384字节,而一个VARCHAR(M)类型的列就最多可以存储65533个字节,这 样就可能出现一个页存放不了一条记录。 

   (1)在Compact和Reduntant行格式中,对于占用存储空间非常大的列,在记录的真实数据处只会存储该列的一部分 数据,把剩余的数据分散存储在几个其他的页中,然后记录的真实数据处用20个字节存储指向这些页的「地址和字节数」,从而可以找到剩余数据所在的页。 

     InnoDB基础[亲测有效]

 

  (2)在Dynamic和Compressed行格式中,它们不会在记录的真实数据处 存储一部分数据,而是把所有的数据都存储到其他页面中,只在记录的真实数据处存储其他页面的地址。

     InnoDB基础[亲测有效]

4.Dynamic和Compressed行格式

  这两种行格式类似于COMPACT行格式,只不过在处理行溢出数据时有点区别,如上。另外, Compressed行格式会采用压缩算法对页面进行压缩。 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9309.html

(0)
上一篇 2023-02-11
下一篇 2023-02-11

相关推荐

  • Python Tuple Usage Guide

    Python Tuple Usage GuidePython是一种极受欢迎的编程语言,其中元组(Tuple)是Python中的一种重要的数据类型。元组在许多场景下都非常有用,因为它可以帮助您存储和操作多个值。本篇文章将会向您介绍Python中元组的概念、创建、修改及元组相关的各种操作。

    2024-09-13
    22
  • win7原版系统安装教程_windows怎么安装

    win7原版系统安装教程_windows怎么安装
    场景 PostgreSQL PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS)。 用于安全地存储数据; 支持最佳做法,并允许在处…

    2023-04-08
    161
  • 腾讯短网址怎么在线生成[亲测有效]

    腾讯短网址怎么在线生成[亲测有效]短网址生成指的是把帮您把冗长的URL地址缩短成8个字符以内的短网址。 那为什么要生成短链接呢? 最基础的,日常在用到微信朋友圈、qq说说、短信、微博等,都有字数的限制。如果链接长度较长,链接发送不全…

    2023-04-04
    169
  • StoneDB社区答疑第一期「建议收藏」

    StoneDB社区答疑第一期「建议收藏」当然,目前 StoneDB 的社区建设还正处于初启阶段,我们坚信,开源项目的成长,最终还是要靠社区用户一起来共创,因此,StoneDB 开源社区非常重视社区用户的声音,在 7 月份,我们从各个渠道里收

    2023-06-01
    133
  • 扩展group by语句

    扩展group by语句学习自《剑破冰山 Oracle开发艺术》第五章 报表开发之扩展GROUP BY对于简单group by语句很难对复杂维度进行分析,难以达到实际生产的复杂报表需求,group by的扩展特性就需要了,u

    2023-02-09
    144
  • 使用Python的Concatenate函数写一个原始标题

    使用Python的Concatenate函数写一个原始标题Python是一个功能强大的解释性编程语言,广泛用于各种领域的应用程序开发和数据分析。在Python中,有一些内置的函数可以帮助你处理不同类型的数据,例如数组、字符串、列表等等。这些函数中,concatenate函数就是一个非常有用的函数,可以帮助你合并不同的数组或字符串,让你的代码更加简洁高效。

    2024-06-14
    53
  • Python修改文件及目录权限

    Python修改文件及目录权限在Linux系统下,文件的权限是用数字表示的。权限包括读(4)、写(2)、执行(1),每个用户(所有者、群组、其他用户)的权限可以相加,最终权限数字是平均权限数字的和。Python提供了os.chmod()函数来修改文件的权限。

    2024-01-30
    106
  • 16个工程必备的JavaScript代码片段(建议添加到项目中)

    16个工程必备的JavaScript代码片段(建议添加到项目中)“这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战” 1. 下载一个excel文档 同时适用于word,ppt等浏览器不会默认执行预览的文档,也可以用于下载后端接口返回的流数据,见3 2.

    2023-03-02
    165

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注