深入学习MySQL,了解InnoDB的逻辑存储结构
技术百科
青灯夜游
发布时间:2021-09-15
浏览: 次 本篇文章带大家了解一下innodb逻辑存储结构,希望对大家有所帮助!
InnoDB逻辑存储结构
在InnoDB中我们创建的表还有对应的索引数据都存储在扩展名为.ibd 的文件中,这个文件路径可以先通过查mysql变量datadir来得到,然后进入对应的数据库名目录,会看到很多ibd,文件名就是表名,这里有两种类型的表空间,共享表空间(或者叫系统表空间)和独立表空间文件。【相关推荐:mysql视频教程】
对于共享表空间,所有的表数据和相应索引都存放在这里,而独立表空间,就是每个表的数据和索引都存放在一个单独的ibd文件中,在目前的MySQL版本中,默认都是使用的独立表空间。
共享表空间文件名可以通过innodb_data_file_path得到,
mysql> show variables like 'innodb_data_file_path'; +-----------------------+------------------------+ | Variable_name | Value | +-----------------------+------------------------+ | innodb_data_file_path | ibdata1:12M:autoextend | +-----------------------+------------------------+ 1 row in set (0.00 sec)
独立和共享表空间可以通过innodb_file_per_table切换,如果启用了他,那么每张表内的数据就单独放在一个表空间文件中,还需要注意,每个表的表空间只存储数据、索引,其他类的数据,如回滚信息、系统事务信息、二次写缓冲仍存储在原始共享表空间中。
下面语句可以查看innodb_file_per_table的状态。
mysql> show variables like '%innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.01 sec)
修改innodb_file_per_table状态
set global innodb_file_per_table=0;
如果在innodb_file_per_table等于0的情况下,也就是OFF关闭情况下,创建的表都会存放的系统共享的表空间中,比如下面的列子。
1.创建database_1数据库 mysql> create database database_1; Query OK, 1 row affected (0.02 sec) 2. 当前状态 mysql> show variables like '%innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.01 sec) 3. 创建表 mysql> create table t1(id int(11)); Query OK, 0 rows affected, 1 warning (0.05 sec) 4. 查看ibd文件 root@hxl-PC:/var/lib/mysql/database_1# ls t1.ibd root@hxl-PC:/var/lib/mysql/database_1# 5. 关闭innodb_file_per_table后在创建表 mysql> set global innodb_file_per_table=0; Query OK, 0 rows affected (0.01 sec) mysql> create table t2(id int(11)); Query OK, 0 rows affected, 1 warning (0.05 sec) 6. 查看ibd文件 root@hxl-PC:/var/lib/mysql/database_1# ls t1.ibd
可以发现在关闭后,没有创建新的ibd文件。
表空间又由段(segment)、区(extent)、页(page)组成,引入一张网络图片。
1.段
表空间由段组成,他是一个逻辑结构,用来管理物理文件,常见的段有数据段、
索引段、回滚段,每个段由N个区和32个零散的页组成。
InnoDB存储引擎表是索引组织的,所以数据就是索引,索引就是数据,通常情况下,创建一个索引的同时就会创建两个段,分别为非叶子节点和叶子节点段。
2.区
区是由连续的页组成的空间,无论如何,每个区的大小都是1MB。为了保证区域内页面的连续性,InnoDB存储引擎一次从磁盘申请4-5个区域。默认情况下,InnoDB存储引擎的页面大小为16KB,也就是有有64个连续页面,16*64=1024=1M。
InnoDB1.2.x版本增加了参数innodb_page_size,这个参数允许设置默认页面大小为4K、8K,
3.页
页是InnoDB存储引擎磁盘管理的最小单位,默认16kb,可以通过参数innodb_page_size设置页大小为4K、8K、16K 。InnoDB为了实现不同的目的而设计了很多种页,InnoDB 存储引擎中常见的页面类型有:
数据页
undo页面
系统页面
事物数据页面(交易系统页面)
插入缓冲位图页
插入缓冲区空闲列表页
未压缩的二进制大对象页面
压缩二进制大对象页面
可以通过以下命令查看大小。
mysql> show status like 'innodb_page_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_page_size | 16384 | +------------------+-------+ 1 row in set (0.00 sec) mysql>
下面是InnoDB数据页结构,它由七部分组成。
| 名称 | 作用 |
|---|---|
| File header | 记录了页头的一些信息,cheksum、Ppervious和next page的记录 |
| Page header | 记录了页的状态信息和存储信息、首个记录的position |
| Infimum+ supremum | InnoDB每个数据页有两个虚拟行记录,用来限定记录边界 |
| Row records | 实际存储的行数据信息 |
| Free space | 空闲空间,同样是链表结构 |
| Page directory | 存放了记录的相对位置 |
| File trailer | innodb利用它来保证页完整地写入磁盘 |
4.行
InnoDB存储引擎是面向行的,页里面又记录着行记录的信息,也就是数据是按照行存储的。行记录数据又是按照行格式进行存放的。每个页存放的行记录也是有硬性定义的,最多允许存放16KB/2-200行,也就是7992行。
InnoDB存储引擎有两种文件格式,一种叫Antelops,另外一种叫Barracuda。
在Antelope文件格式下,有compact和redundant两种行记录格式。
在Barracuda文件格式下,有compressed和dynamic两种行记录格式。
可以通过以下方式查看当前格式,其中Row_format就是对应行格式存储类型。
mysql> show table status \G;
*************************** 1. row ***************************
Name: t1
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 15
Avg_row_length: 1092
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2025-08-24 09:43:29
Update_time: 2025-08-24 14:43:35
Check_time: NULL
Collation: utf8mb4_0900_ai_ci
Checksum: NULL
Create_options:
Comment:原文地址:https://juejin.cn/post/6999936914119720996作者:i听风逝夜
更多编程相关知识,请访问:编程视频!!
# 就会
# 放在
# 都是
# 是有
# 情况下
# 可以通过
# 在这里
# 两种
# 有两种
# https
# 对象
# 数据库
# mysql
# Directory
# 存储类
# 列子
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 电脑无法识别U盘怎么办 Windows磁盘管理与驱
- 如何使用Golang读取日志文件_Golang b
- Win11如何暂停系统更新 Win11暂停更新最长
- Win11怎么查看显卡温度 Win11任务管理器查
- Python项目回滚策略_发布安全说明【指导】
- Win10怎样卸载DockerDesktop_Wi
- Win11怎样彻底卸载自带应用_Win11彻底卸载
- LINUX的SELinux是什么_详解LINUX强
- c++的位运算怎么用 与、或、异或、移位操作详解【
- MAC怎么用连续互通相机里的“桌上视角”_MAC在
- 怎么将XML数据可视化 D3.js加载XML
- Win11如何设置文件关联 Win11修改特定文件
- 如何使用Golang encoding/json解
- 如何在Golang中理解指针比较_Golang地址
- Win11如何关闭小娜Cortana Win11禁
- Windows10系统怎么查看CPU核心数_Win
- Win11怎么格式化U盘_Win11系统U盘格式化
- php怎么操作Redis_Redis扩展连接与基本
- 如何正确访问 Laravel 模型或对象的属性而非
- Win11怎样安装钉钉客户端_Win11安装钉钉教
- php订单日志怎么在swoole写_php协程sw
- Win11输入法选字框不见了怎么办_Win11输入
- 如何处理“XML格式不正确”错误 常见XML we
- php与c语言在嵌入式中有何区别_对比两者在硬件控
- Avalonia如何实现跨窗口通信 Avaloni
- LINUX如何删除用户和用户组_Linux use
- Win11怎么设置默认浏览器Chrome_Wind
- c++中的std::conjunction和std
- Win11怎么查看wifi信号强度_检测Windo
- Linux怎么实现内网穿透_Linux安装Frp客
- 如何使用Golang处理静态文件缓存_提高页面加载
- 如何在Golang中定义接口_抽象方法和多态实现
- Win10如何卸载自带Edge_Win10彻底卸载
- Go语言中正确反序列化多个同级XML元素为结构体切
- Win11怎么设置声音输出设备_Windows11
- c++怎么使用类型萃取type_traits_c+
- 新手学PHP架构总混淆概念咋办_重点梳理【教程】
- Win11 C盘满了怎么清理 Win11磁盘清理和
- 如何在Golang中实现RPC异步返回_Golan
- Windows10无法连接到Internet_Wi
- 短链接怎么用php递归还原_多层加密链接的处理法【
- 如何使用正则表达式批量替换重复的星号-短横模式为固
- Windows10蓝屏代码DPC_WATCHDOG
- 如何理解Go指针和内存分配关系_Go Pointe
- MAC如何设置网卡MAC地址克隆_MAC终端修改物
- Win11怎么关闭应用权限_Windows11相机
- Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱
- Win11应用商店下载慢怎么办 Win11更改DN
- php怎么下载安装后设置错误日志_phpini l
- Go 中 defer 语句在 goroutine

QQ客服