select

  • 取得连接,会使用到 mysql 中的连接器
    • 还会经历 tcp 三次握手,因为 mysql 是基于 tcp 进行通信的
    • 这个过程会校验用户名和密码是否正确
    • 校验用户权限
  • 查询缓存,key 为 sql 语句,value 为 sql 查询结果,不过在 mysql8.0 后被删掉了
    • 更新比较频繁的表缓存命中率很低,因为只要一个表被更新了,该表的缓存就会被删掉,维护起来就很麻烦
  • 分析器,分为词法分析和语法分析。词法分析就是提取 sql 语句关键字,语法分析就是校验 sql 语法,构建 sql 语法树,方便后面去读取表名,列名,语句类型
  • 执行阶段
    • 预处理
      • 检查 sql 查询语句中的表 or 字段是否存在
      • 把*扩展为表上的所有列
    • 优化阶段
      • 决定如何走索引
      • 如何 jion
    • 执行阶段:根据表的引擎定义,去执行这个引擎提供的接口