MySQL篇面试题模拟

问题:

1,介绍MVCC实现原理

2.innoDB的底层索引结构

3.说一下mysql的innodb与MyISAM的区别?

4.索引是什么?有什么好处?

5.说说B+树和B树的区别

6.什么情况下会回表查询,什么是覆盖索引

7.联合索引失效的原因

8.索引失效的原因

9.事务的特性

10.事务的隔离级别

回答:

1.

MVCC(Multi-Version Concurrency Control)是多版本并发控制器,是由 undo 版本链 + Read View相结合实现的。

数据库表每行有三个隐藏列,记录修改表的事务id,指向旧版本的指针,旧版本记录在undo.log日志中,由指针形成版本链。

Read View会生成四个与事务id有关的字段,MVCC通过比较改表的事务id和Read View中的事务id大小,判断数据库内容是否可见。

使用场景在读提交和可重复读这两个事务隔离级别。区别在于读提交在每次查询执行前都生成 Read View,可重复读只在第一次查询前生成Read View。

2.

底层数据结构是B+ 树,InnoDB的叶子节点是双向链表,记录按照聚簇索引有序存储

3.

事务 :InnoDB有ACID事务支持,MyISAM不支持事务

索引结构: InnoDB是聚簇索引,MyISAM 是非聚簇索引

锁粒度:InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。

4.

索引类似于书籍的目录,可以减少扫描的数据量,提高查询效率。

5.

在B+树中,数据都存储在叶子节点上,而非叶子节点只存储索引信息;而B树的非叶子节点既存储索引信息也存储部分数据。

B+树的叶子节点使用链表相连,便于范围查询和顺序访问;B树的叶子节点没有链表连接。

B+树的查找性能更稳定,每次查找都需要查找到叶子节点;而B树的查找可能会在非叶子节点找到数据,性能相对不稳定。

6.

二级索引叶子节点存:索引列的值 + 主键值;不存完整行数据。

如果查询的数据不在二级索引里,就通过叶子节点的主键值进行主键索引,就能查询到数据了,这个过程就是回表。

覆盖索引是指一个索引包含了查询所需的所有列,因此不需要访问表中的数据行就能完成查询。

7.

必须满足最左匹配原则,否则失效

8.

1.模糊匹配,like 2.使用函数

3.表达式计算 4.使用联合索引不满足最左匹配原则

9.

ACID

原子性(Atomicity 回滚日志实现****),一致性(Consistency**** 持久性+原子性+隔离性实现****)****

隔离性(Isolation MVCC或锁机制****),持久性(Durability**** 重做日志实现****)****

10.

读未提交(read uncommitted) ,可能发生脏读、不可重复读和幻读现象;

读提交(read committed) ,可能发生不可重复读和幻读现象,但是不可能发生脏读现象;在「每个语句执行前」都会重新生成一个 Read View

可重复读(repeatable read mysql默认级别 ,可能发生幻读现象,但是不可能脏读和不可重复读现象;「启动事务时」生成一个 Read View

串行(xing)化(serializable) ;脏读、不可重复读和幻读现象都不可能会发生。

通过加读写锁的方式来避免并行访问

相关推荐
这个DBA有点耶2 小时前
MySQL 8.0.20移除了Block Nested Loop,之前学的JOIN优化知识还适用吗?
数据库·mysql·架构
开心麻瓜5 小时前
一条 SQL 跑了 8 秒,优化到 200ms 的全过程
mysql
FYKJ_20106 小时前
【毕设分享】基于Web的校园兼职信息发布与申请系统07059
前端·vue.js·spring boot·mysql·typescript·spark·课程设计
文人sec7 小时前
MYSQL:insert...select:为什么锁源表的所有行和间隙?怎么最快地复制一张表?
数据库·python·mysql
RestCloud9 小时前
大数据量ETL同步优化:亿级表同步与性能调优
mysql·数据迁移·数据传输·数据同步·亿级数据传输·大数据量传输
feng_you_ying_li10 小时前
mysql基本介绍,截止到类型float的一部分介绍
mysql
高级程序源10 小时前
django校企合作实习基地管理系统82506-计算机课程设计、毕业设计
vue.js·后端·python·mysql·django·课程设计·pygame
dkbnull10 小时前
数据库性能调优详解
数据库·mysql
yxlalm10 小时前
对话记忆持久化-Redis热与MySQL冷
android·redis·mysql