广告
返回顶部
首页 > 资讯 > 数据库 >InnoDB基础
  • 467
分享到

InnoDB基础

InnoDB基础 2018-10-11 15:10:10 467人浏览 绘本
摘要

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

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行格

   

    (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个二进制位,不同的位代表不同的意思,如图: 

    

  (4)记录的真实数据 

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

    

2.行溢出数据

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

  

 

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

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

 3.行过长导致的页溢出

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

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

     ...

 

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

     ...

4.Dynamic和Compressed行格式

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

 

 

 

 

 

 

您可能感兴趣的文档:

--结束END--

本文标题: InnoDB基础

本文链接: https://www.lsjlt.com/news/5208.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • InnoDB基础
      在InnoDB中,数据存储在磁盘上,处理数据时需要先将数据从磁盘读取,再写到内存。InnoDB采用局部性原理加载。 一、局部性原理   从磁盘读取数据时,不需要一行一行读取,而是以页为单位读取,操作系统中一页4kb,Inno...
    99+
    2018-10-11
    InnoDB基础
  • InnoDB基础知识点有哪些
    这篇文章给大家分享的是有关InnoDB基础知识点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、关于count(*)知识点:MyISAM会直接存储总行数,InnoDB则不...
    99+
    2022-10-19
  • MySQL中Innodb page clean线程基础知识有哪些
    这篇文章主要介绍“MySQL中Innodb page clean线程基础知识有哪些”,在日常操作中,相信很多人在MySQL中Innodb page clean线程基础知识有哪些问题上存在疑惑,小编查阅了各式...
    99+
    2022-10-18
  • Android基础------Activity基础
    应用内Activity的跳转方式 一、通过显式意图跳转,如字面意思一样,跳转的目的地是可以明确看到的 二、通过隐式意图跳转,这种方式的跳转需要我们在AndroidManifes...
    99+
    2022-06-06
    activity Android
  • Python基础——1基础
    输出 print(‘把子肉爱上热干面’,‘哈哈’)  # ‘,’输出为空格 输人 name = input(‘提示的内容’) /浮点除法  %.6f //地板除法  整除 %  取余 python编码问题 (采用Unicode编码) ...
    99+
    2023-01-30
    基础 Python
  • MySQL基础:基础查询
    DQL语言:数据查询语言 3.1 基础查询 语法 select 查询列表 from 表名; 特点 查询列表可以是字段、常量、表达式、函数,也可以是多个 查询结果是一个虚拟表 示例 1、查询单个字段 selec&#...
    99+
    2016-06-13
    MySQL基础:基础查询
  • Python基础--Python3基础语
    Python3 基础语法编码默认情况下,Python3源码文件以UTF-8编码,所有字符串都是Unicode字符串。当然也可以为源码文件指定不同的编码,例如:# -*- coding: cp-1252 -*-标识符1.第一个字符必须是字母表...
    99+
    2023-01-31
    基础 Python
  • MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解
    本文源码:GitHub·点这里 || GitEE·点这里 一、MySQL逻辑架构 1、逻辑架构图 基于下面的逻辑架构图,可以大致熟悉MySQL各个架构组件之间的协同工作关系。 很经典的C/S架构风格,即客户端/服务端模式。 ...
    99+
    2018-06-02
    MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解
  • Python基础-Python基础使用
    上篇文章 Python基础-初识Python 我们已经知道了什么是Python,Python的用处、和Python的解释器、Python的安装,这篇文章,我们主要讲Python的使用入门本文防盗链:http://python789.blog...
    99+
    2023-01-31
    基础 Python
  • [Linux 基础] linux基础指令(1)
    文章目录 1、Linux下基本指令1.ls指令2.pwd指令3.cd指令4.touch指令5.mkdir指令6.rmdir指令 && rm指令7.man指令8.cp指令9.mv指令10.ca...
    99+
    2023-09-13
    linux
  • Python基础篇-Python基础语法
    为什么学习pythonhttp://www.apelearn.com/bbs/thread-7739-1-1.html Python的安装 getconf LONG_BIT     查看系统版本多少位 rpm -q python uname...
    99+
    2023-01-31
    基础 语法 Python
  • Python基础一: 计算机基础,Pyt
    1.CPU 内存 硬盘 操作系统 CPU:计算机的运算和控制中心,相当于人类的大脑。 内存:用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。(暂时存储数据,临时加载数据及应用程序) 4G,8G,16G,32G 速度...
    99+
    2023-01-31
    基础 计算机 Python
  • Python基础之面向对象基础
    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程思想,它将程序中的数据和操作封装成对象,...
    99+
    2023-09-23
    Python
  • 前端基础入门四(JavaScript基础)
    目标:掌握编程的基本思维掌握编程的基本语法我们先来学习JavaScript基础,后续会讲解JavaScript高级。重点内容变量的声明及使用数据类型类型转换运算符JavaScript介绍JavaScript是什么JavaScript是一种运...
    99+
    2023-06-03
  • Python基础
    主要是复习时总结自己不太熟悉的知识点了(面向Internet的总结)。 函数的参数 位置参数——按位置依次对应 关键字参数——按“键值对”对应 func('hello', val = 1) 调用时:若有位置参数,位置参数必须在关键字参...
    99+
    2023-01-30
    基础 Python
  • MySQL基础
    1. 数据库 1.1 数据库概述 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。 什么是数据库管理系统 数据库管理系统(Data...
    99+
    2019-04-23
    MySQL基础
  • MongoDB基础
    一、概述1.1 MongoDB概念MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可...
    99+
    2022-10-18
  • ansible--基础
    马哥出品 ansible中文文档:http://www.ansible.com.cn/index.htmlansible介绍:ansible是个什么东西呢?官方的title是“Ansible is Simp...
    99+
    2022-10-18
  • sql 基础
    去除数据库登录界面的所有用户信息 C:UsersasusAppDataRoamingMicrosoftSQL Server Management Studio14.0SqlStudio.bin 查询姓名中第二个字与第三个字相同: selec...
    99+
    2015-02-24
    sql 基础
  • MySQL 基础
    MySQL 基础 MySQL 基础 SQL 介绍 DDL(数据定义语言) 数据库操作 数据表操作 常用约束 约束操作 索引操作 DML(数据操作语言) SELECT - 从数据库表中获取数据 UPDATE -...
    99+
    2021-06-05
    MySQL 基础
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作