【MYSQL】纯干货!面试题:InnoDB!完全解析!建议收藏!

网友投稿 774 2022-05-28

InnoDB 架构

下图是官方文档给出的InnoDB存储结构

InnoDB的日志先行策略,按照内存到磁盘的顺序对数据进行处理。

其中的优点有以下几点

内存中操作完成就可以返回成功,执行效率高

就算是数据落回磁盘过程中断电也能通过redo日志找回

InnoDB的缓存池通过页链表实现,效率高

InnoDB的磁盘中的存储有以下特点,我做了简化直接突出重点,方便大家记忆

InnoDB表的限制:一个表的辅助索引最多64个,一行大小最多65535,组合索引最多16个字段

表空间

系统表空间

File-Per-Table 表空间

Undo表空间

临时表空间

索引

InnoDB中通过索引组织表存放索引。

InnoDB中主键索引使用的是B+索引

B+树的特点

每个非叶子节点只存储键值,不存储数据

一般的高度为2-4层,所以查找速度很快

辅助索引有被称为非聚集索引,辅助索引存储的是主键的值,当拿到主键的值之后再去查找数据的过程被称为回表。

如果人家问你回表,可以按照回表-辅助索引-索引的逻辑解释。

覆盖索引指的是辅助索引能找到要找的列,而不需要回表。

联合索引的顺序很重要,所以我们在创建索引的过程中需要注意列的顺序。

事务

ACID

原子性:Atomicity

一致性:Consistency

隔离性:Isolation

持久性:Durability

事务隔离级别有4种,InnoDB默认支持REPEATABLE READ。

InnoDB通过redo日志实现事务,redo日志是存储在磁盘的物理操作日志。

binlog是维护日志一致性在内存里的逻辑日志。

脏读是指一个事务提交之前,另一个事务来读取数据造成的数据不一致。

幻读问题就是一个事务中同一个SQL多次执行,结果集不同。

Innodb支持行级锁。

行级锁分为共享锁和排他锁。

共享锁(S锁),只可以读,不可以修改

排它锁(X锁),不可读也不可写

意向锁(Intention Locks)

意向共享锁(IS),加行共享锁之前需要得到的锁

意向排他锁(IX),加行排他锁之前需要得到锁

行锁的存储结构

typedef struct lock_rec_struct lock_rec_t struct lock_rec_struct{ ulint space; /*space id*/ ulint page_no; /*page number*/ unint n_bits; /*number of bits in the lock bitmap*/ }

1

2

3

4

5

6

加锁逻辑:加锁-唯一索引的冲突检查-判断Gap锁或Next-Key锁-加X锁

面试侧重点

基本的查询语法

索引

【MYSQL】纯干货!面试题:InnoDB!完全解析!建议收藏!

存储结构建议在索引的时候自己带出来点,给自己创造一些亮点

Mysql

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《Python大规模机器学习》— 2.2.5 关注实例排序
下一篇:【量化交易】⚠️学会这个, 日入三千从此不是梦⚠️ 系列简介 ☢️万字长文 建议收藏☢️
相关文章