实现一个select查询语句,mysql内部是怎么实现的?
...大约 1 分钟
实现一个select查询语句,mysql内部是怎么实现的?
- 连接器
- 与客户端进行TCP三次握手建立连接
- 校验用户端的用户名和密码
- 校验成功后,读取用户的权限,之后的权限逻辑判断都是基于此时读取到的权限
- 查询缓存
- 在Mysql 8.0 版本之前 是有查询缓存操作的,主要是对查询语句进行缓存,下次查询时先去找缓存,如果有就直接返回,如果没有就执行该语句,并将语句和结果作为key-value存入缓存
- 执行更新语句时,会将所有的缓存删除,就很鸡肋,所以在Mysql 8.0 版本之后就将该策略删除了
- 解析SQL
- 词法分析:识别关键字,比如 select、from 等
- 语法分析:判断语法是否有错误,满足条件后会构建出SQL语法树,方便后续的读取
- 执行SQL
- 预处理阶段:1.检查SQL查询语句中表与字段是否存在 2.如果有 “ * ” 将 “ * ” 符号扩展为所有的列
- 优化阶段:优化器选择查询成本最小的执行计划,比如走全表查询还是索引查询,选择什么样的索引
- 执行器:根据执行计划进行读取数据,将数据返回给客户端