一条 SQL 查询语句在 MySQL 中是怎样执行的?
先自己想一想,再看参考要点
参考要点
- MySQL 分为 Server 层和存储引擎层,Server 层负责连接、解析、优化和执行,存储引擎(例如 InnoDB)负责存取数据
- 连接器校验用户名和密码并维持连接,解析器做词法和语法分析,关键字写错时报 ERROR 1064
- 预处理检查表和列是否存在以及权限
- 优化器估算各种执行方式的代价,选出代价最小的,并不是有索引就用,用 EXPLAIN 和 optimizer_trace 可以看到选择和估算
- 执行器按执行计划调用存储引擎的接口,8.0 已经移除了查询缓存,更新语句还要写 undo log、redo log 和 binlog