持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
Mysql执行一个Select语句,发生了什么
-
客户端通过TCP连接发送请求连接连接器,然后连接器对请求进行权限的校验
-
连接过之后,客户端就能发送sql语句了
-
查缓存
- 如果是Select语句,Mysql会先查缓存,缓存是以key-value形式存在,key是sql语句,value是查询结果
- 但是这种缓存查询比较鸡肋。对于更新频繁的表,查中缓存的概率很低。而且只要表有一个更新操作,这个表那么缓存就要被清空。
- 在8.0版本之后,就把缓存删除掉了
-
解析sql,通过解析器对词法和语法进行分析。如果sql语句不对,就会报错
-
执行sql:执行sql查询,每个Select经过一下三个步骤
- 预处理阶段:检查所要查询的字段是否存在,将select * 符号,扩展为所有列
- 优化阶段:优化器负责将sql的具体执行方案确定下来,比如有多个索引,确定使用哪一个
- 执行阶段:根据计划执行Sql语句,从存储引擎读取记录,返回给客户端