Mysql执行select过程

82 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

Mysql执行一个Select语句,发生了什么

  • 客户端通过TCP连接发送请求连接连接器,然后连接器对请求进行权限的校验

  • 连接过之后,客户端就能发送sql语句了

  • 查缓存

    • 如果是Select语句,Mysql会先查缓存,缓存是以key-value形式存在,key是sql语句,value是查询结果
    • 但是这种缓存查询比较鸡肋。对于更新频繁的表,查中缓存的概率很低。而且只要表有一个更新操作,这个表那么缓存就要被清空。
    • 在8.0版本之后,就把缓存删除掉了
  • 解析sql,通过解析器对词法和语法进行分析。如果sql语句不对,就会报错

  • 执行sql:执行sql查询,每个Select经过一下三个步骤

    • 预处理阶段:检查所要查询的字段是否存在,将select * 符号,扩展为所有列
    • 优化阶段:优化器负责将sql的具体执行方案确定下来,比如有多个索引,确定使用哪一个
    • 执行阶段:根据计划执行Sql语句,从存储引擎读取记录,返回给客户端