MySQL之InnoDB

能今天做好的事就不要等到明天。以梦为马,学习趁年华。


前言

没有任何文笔,都是写给自己看的,算是对知识的复习,本篇都是InnoDB的八股文知识。

一、MySQL存储引擎

1. InnoDB特点

优势:独立表空间,支持MVCC,行锁设计,提供一致性非锁定读,支持外键;
特性:插入缓冲,二次写,自适应哈希索引,预读;
存储方式:使用聚集的方式存储数据,每张表的存储都是按主键顺序存放。

2.MyISAM和InnoDB区别

(1)InnoDB支持事务,MyISAM不支持事务;
(2)InnoDB支持外键,MyISAM不支持外键;
(3)InnoDB不支持全文索引,MyISAM支持全文索引;
(4)InnoDB支持表、行(默认)级锁,MyISAM支持表级锁;
(5)InnoDB表必须有唯一索引,MyISAM表可以没有;
(6)Innodb存储文件有frm、ibd,Myisam是frm、MYD、MYI;
(7)InnoDB不保存表的具体行数,MyISAM用一个变量保存了整个表的行数。

3.存储引擎选择

MySQL5.5后默认支持InnoDB为存储引擎,你如果对MyISAM和InnoDB不是特别的熟悉,推荐你选择InnoDB存储引擎。

二、InnoDB页

1.InnoDB页简介

Page是Innodb存储的最基本结构,也是Innodb磁盘管理的最小单位,与数据库相关的所有内容都存储在Page结构里。
Page分为几种类型:数据页(B-Tree Node),Undo页(Undo Log Page),系统页(System Page),事务数据页(Transaction System Page)等;
每个数据页的大小为16kb,每个Page使用一个32位(一位表示的就是0或1)的int值来表示,正好对应Innodb最大64TB的存储容量(16kb * 2^32=64tib)。

2.InnoDB页结构

File Header ,表示页的一些通用信息,占固定的38字节。
Page Header ,表示数据页专有的一些信息,占固定的56个字节。
Infimum + Supremum ,两个虚拟的伪记录,分别表示页中的最小和最大记录,占固定的 26 个字节。 
User Records :真实存储我们插入的记录的部分,大小不固定。
Free Space :页中尚未使用的部分,大小不确定。 
Page Directory :页中的某些记录相对位置,也就是各个槽在页面中的地址偏移量,大小不固定,插 入的记录越多,这个部分占用的空间越多。 
File Trailer :用于检验页是否完整的部分,占用固定的8个字节。

在这里插入图片描述

3.数据区

在MySQL的设定中,同一个表空间内的一组连续的数据页为一个extent(区),默认区的大小为1MB,
页的大小为16KB。16*64=1024,也就是说一个区里面会有64个连续的数据页。
连续的256个数据区为一组数据区。

在这里插入图片描述

4. 页分裂

 关于页分裂问题,先要思考一下B+TREE结构和InnoDB索引设计问题。
 在B+Tree中的叶子结点之间是通过双向链表关联起来的,则MySQL作者在InnoDB索引的设定中,要求主键索引是递增的,这样在构建索引树的时候才更加方便做二分查找。
 基于以上了解,可以得出页分裂的目的就是保证后一个数据页中的所有行主键值比前一个数据页中主键值大。

结论:当主键不是递增时,才会出现页分裂问题,它将主键在页中重新做排序以方便B+Tree做二分查找,注意此过程开销非常大,则InnoDB表主键必须是递增的(不要选择uuid作为InnoDB表的主键)。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值