第五节:从一条记录说起——InnoDB记录结构
《MySQL 是怎样运行的:从根儿上理解 MySQL》第五节:从一条记录说起——InnoDB记录结构
准备工作
现在只知道客户端发送请求并等待服务器返回结果。
MySQL什么方式来访问这些数据?
MySQL服务器上负责对表数据的读取和写入工作的部分是存储引擎。
什么格式存放?
真实的数据在不同存储引擎中存放的格式一般是不同的。
InnoDB页简介
InnoDB将数据划分为若干个页,以页作为磁盘和内存的交互的基本单位,InnoDB也的大小一般为16KB。
InnoDB行格式
InnoDB存储引擎有四种不用类型的行个格式,Compact、Redundant、Dynamic和Compressed行格式
指定行格式的语法
CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称
ALTER TABLE 表名 ROW_FORMAT=行格式名称
案例:
CREATE TABLE record_format_demo (
c1 VARCHAR(10),
c2 VARCHAR(10) NOT NULL,
c3 CHAR(10),
c4 VARCHAR(10)
)CHARSET=ASCII ROW_FORMAT=COMPACT;
COMPACT行格式
一行记录包含
记录的额外信息
变长字段长度列表:
记录每个变长列数据占用的字节长度,倒叙存放。
WML记录,还要再学习。
可以不需要,比如:表的每个列都不是变长的数据类型就没有。
NULL值列表:
首先统计允许从存储NULL的列,主键列、被NOT NULL修饰的列不可以存储NULL值。
表中么有允许NULL值的列,NULL值列表也就不存在了。
允许存储NULL的列对应一个二进制位。
二进制位的值为1,表示该列值为NULL。
二进制位的值为0,表示该列值不为NULL。
二进制位按照逆序排列,第一个列和最后一个二进制位对应。
MySQL规定NULL值列表必须用整数个字节位表示,如果使用的二进制位不是整数个字节,则在高位补0
记录头信息:
五个固定字节组成,其他后面学习。
记录的真实数据
隐藏列,除了真实数据MySQL还会添加三个隐藏列。
row_id:可选。在没有主键,也没有定义unique键的列,InnoDB才会为表添加。
transaction_id:必选,事物ID
roll_pointer:必选,回滚指针
数据列
非变成字段,没存储地方,空格字符填充。
存储为null的列,在前面的NULL值列表中有存储,不会再记录,节省空间。
CHAR(M)列的存储格式
列采用定长字符集,该列占用的字节数不会被加到变长字段长度列表,
如果采用变长字符集时,该列占用的字节数也会被加到变长字段长度列表。
用字符集最大的字节占空间,防止后面修改数据需要的空间变大而重新分配空间导致碎片。
Redundant行格式:MySQL5.0以前的一种行格式(没多看 略)
一行记录包含
记录的额外信息
字段长度偏移列表
没有变长,说明会记录所有的列(包括隐藏列)。
偏移:表示它是采用两个相邻值的差值来计算各个列值的长度。
记录头信息
记录真实数据
行溢出数据,不太理解,后面再学习一次。
VARCHAR(M)最多能存储的数据?
计算方式不太理解,后面再学习一次。
记录数据太多产生的溢出
一个页的大小一般是16kb,也就是16384字节,可能一行记录超过16384个字节。
作者总结
1.页是MySQL中磁盘和内存交互的基本单位,也是MySQL是管理存储空间的基本单位。
2.指定修改行格式的语法如下:
CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称
ALTER TABLE 表名 ROW_FORMAT=行格式名称
3.InnoDB现在定义了4种行格式
一个也一般是16KB,当记录中的数据太多,当前也放不下的时候,会把多余的数据存储到其他页中,称为行溢出。
脑图地址:方便有需要的同学高清看
http://naotu.baidu.com/file/a0133241fae5042adac6387c7a2a4a7b?token=fb9dfd8fefbdc019
第五节:从一条记录说起——InnoDB记录结构的更多相关文章
- 风炫安全WEB安全学习第二十五节课 利用XSS键盘记录
风炫安全WEB安全学习第二十五节课 利用XSS键盘记录 XSS键盘记录 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源.所以xyz.com下的js脚本采用a ...
- 第三百九十五节,Django+Xadmin打造上线标准的在线教育平台—Xadmin集成富文本框
第三百九十五节,Django+Xadmin打造上线标准的在线教育平台—Xadmin集成富文本框 首先安装DjangoUeditor3模块 Ueditor HTML编辑器是百度开源的HTML编辑器 下载 ...
- centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课
centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询
第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...
- centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课
centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节 ...
- 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联
第九节: 利用RemoteScheduler实现Sheduler的远程控制 一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...
- CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第五节
原文链接 第五节:了解和使用共享内存(2) Rob Farber 是西北太平洋国家实验室(Pacific Northwest National Laboratory)的高级科研人员.他在多个国家级的实 ...
随机推荐
- javascrip的数组扁平化
扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组. 举个例子,假设有个名为 flatten 的函数可以做到数组扁平化,效果就会如下: var ar ...
- pyhive连接hive(失败)
一.安装pyhive pip install sasl(需要来下载至本地安装:https://download.lfd.uci.edu/pythonlibs/q4hpdf1k/sasl-0.2.1-c ...
- ht-7 treeSet特性
TreeSetTreeSet可以对set集合中的元素进行排序,默认按照asic码表的自然顺序排序,之所以treeset能排序是因为底层是二叉树,数据越多越慢,TreeSet是依靠TreeMap来实现的 ...
- BZOJ 1492: [NOI2007]货币兑换Cash 斜率优化 + splay动态维护凸包
Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个 ...
- BZOJ 1096: [ZJOI2007]仓库建设 动态规划 + 斜率优化
#include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #defi ...
- mongodb用户创建及权限控制
转载 2017年03月30日 12:36:15 2169 摘要: MongoDB 3.0 安全权限访问控制,在添加用户上面3.0版本和之前的版本有很大的区别,这里就说明下3.0的添加用户的方法. 环境 ...
- day28-Javascript定时器的应用案例
转行学开发,代码100天——2018-04-13 上篇文章中记录了定时器的用法,本篇通过两个常用案例进一步巩固定时器的应用. 案例一:消息框延时,如QQ中鼠标移动到头像,弹出一个信息框:移出后,消息框 ...
- redis centos集群搭建和java应用
1. 首先要ssh免密登录 redis集群,3台虚拟机,6个节点,每台机器2个节点一主一从. 192.168.132.154 c0192.168.132.156 c1192.168.132.155 c ...
- Oracle-数据表对象
表一般指的是一个关系表,也可以生成对象表以及临时表.齐总,对象表是通过用户定义的数据类型生成的,临时表用于存储专用于某个事务或会话的临时数据 字符类型: 定长:char (1-2000字节) 变长:v ...
- Altium Designer chapter1总结
第一章操作基础中有以下几点需要注意: (1)随着DSP.ARM.FPGA等高速逻辑元件的应用,PCB的信号完整性与抗干扰性能显得尤为重要. (2)Altium Designer的发展史:Protel ...