MySQL存储原理

本文详细介绍了MySQL的存储原理,包括页的结构、插入策略和查询方式。讨论了主键和二级索引的区别,强调了自增主键的效率优势。还探讨了联合索引的最左匹配原则和覆盖索引的优化。此外,涉及了事务的ACID特性、并发问题及解决办法,以及数据库的锁机制。最后分享了索引选择和优化的经验,以及数据库设计的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL中的数据组织是以页为单位的
每一页中的信息包括:

页头
记录页面的控制信息,共占56字节,包括页的左右兄弟页面指针(用来连接相邻的页面),页面空间使用情况等
虚记录
最大虚记录: 比页内最大主键还大
最小虚记录:比页内最小主键还小
记录堆
行记录存储区: 分为有效记录和已删除记录两种
自由空间链表
已删除记录组成的链表
未分配空间
页面未使用的存储空间
页尾
页面组后部分,占8个字节,主要存储页面的校验信息

页内记录维护

顺序保证
MySQL中的数据是逻辑连续的

页与页之间的关系图

插入策略
自由空间链表
未分配空间
插入数据时,应该先从自由空间链表中找地插,实在没有空间了再存入未分配空间中,这样空间的利用率就高了
如果页面中已删除的记录很多,但是又直接从未分配空间中插入数据,则会导致页面中的空洞越来越多,表占用的空间很大,但是有效的记录又很少

页内查询
遍历
二分查找

这样,就保证了读和写的效率,读使用slot进行二分查找,写使用逻辑连续

MySQL InnoDB索引实现原理及使用优化分析
聚簇索引
数据存储在主键索引中
数据按主键顺序存储

自增主键VS随机主键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值