MySQL常见面试题——架构相关
更新: 5/10/2025 字数: 0 字 时长: 0 分钟
MySQL的组成部分
- 连接器: 用于连接身份
- 查询缓存: 在SELECT是会先去缓存中寻找是否要查找的数据是否缓存,但是由于该功能实用性不大,因此于MySQL8.0中正式删除
- 分析器: 当缓存未命中时就会经过解析器,用来解析SQL语句,先检查要干什么,在检查是否有错误。
- 优化器: 对SQL语句进行优化,采取最佳方案执行。
- 执行器: 执行SQL语句并返回数据,在执行前会先查看是否拥有对应权限,若没有则会报错
- 插件式存储引擎:主要完成数据的存储与读取,采用的插件式架构,含有Memory,InnoDB等多种存储引擎,绝大多数场景均使用InnoDB
存储引擎
MySQL5.5之前使用MyISAM作为默认引擎,之后使用InnoDB作为默认引擎,InnoDB是MySQL的存储引擎中唯一自带事务的引擎。
MyISAM与InnoDB的区别
MyISAM不支持事务,与行级锁,且一旦崩溃数据不可恢复。
进而导致了MyISAM不适合分布式,高并发的场景,且抗风险能力差。这都是我们不选用MyISAM的理由
MySQL常见面试题——SQL相关
更新: 5/10/2025 字数: 0 字 时长: 0 分钟
数据库的三大范式
- 第一范式:一个表中的每一列都是不可分割的原子数据
- 第二范式:一个表中的每一列都必须与主键有关
- 第三范式:一个表中的每一列都必须与主键直接相关
反三大范式
三大范式实际上是一个很理论的东西,而且这东西提出的很早,睡着时代的发展三大范式实际已经不再对表结构具有很强的指导意义
下面举几个违反三大范式的例子:
- 反第一范式: 我们设计一个用户画像,并将这个画像存在数据库里,这种设计方式最好的实现就是存放一个json数组进入数据库,但Json数组明显是可以拆分的
- 反第二/三范式: 我们在设计数据库的时候经常会设计冗余字段,关联表等东西,这些实际上在设计方面都与第二第三范式有一定的违背