MySQL面试高频之逻辑架构(1)
一条SQL的执行过程
-
查询缓存:如果缓存中有这条SQL,则直接从缓存中将SQL语句的结果返回
-
缓存的命中率很低,8.0后缓存已被弃用
-
缓存鸡肋的原因
- 缓存中的SQL语句必须完全一致才能匹配成功
- 对数据操作后,缓存极易失效
-
-
解析器:对SQL进行词法分析和语法分析
- 词法分析:识别出SQL语句中的关键字,例如
select、id - 语法分析:检查SQL语句是否符合语法规范
- 词法分析:识别出SQL语句中的关键字,例如
-
优化器:优化阶段可以分为逻辑查询优化阶段和物理查询优化阶段
- 在优化器中确定SQL语句执行的路径,例如是进行全表查询,还是进行索引查询
-
执行器:调用存储引擎的API,根据查询计划进行查询
总结一条SQL的执行过程:
- SQL语句 ---> 查询缓存 ---> 解析器 ---> 优化器 ---> 执行器
存储引擎
InnoDB引擎:具备外键支持功能的事务存储引擎
- InnoDB是MySQL默认事务型引擎,它被设计用来处理大量短期事务,确保事务的提交(
commit)和回滚(rollback) - 除了增加和查询外,还要删除和更改操作,则应选择InnoDB引擎
- InnoDB擅长处理巨大数据量
- 在InnoDB引擎中,索引即数据,因此对 内存 要求高,内存的大小对性能有决定性影响
MyISAM引擎:主要的非事务处理存储引擎
- MyISAM提供了大量的特性,包括全文索引、压缩、空间函数等
- 5.5之前是默认的存储引擎
- 优势是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用