跳至主要內容

MySql-Sql 语句是如何执行

HFwasMySqlMySql约 764 字大约 3 分钟

MySql-Sql 语句是如何执行

MySql基本架构图

  • MySql分为两部分
    • Server层
      • 连接器
      • 查询缓存
      • 分析器
      • 优化器
      • 执行器等
    • 存储引擎
      • 负责数据的存储和提取
      • 支持 InnoDB,MyISAM,MEMORY 等多个存储引擎
Snipaste_2023-10-12_23-32-49
Snipaste_2023-10-12_23-32-49

连接器

  • 连接数据库,首先会到连接器。连接器负责跟客户端建立连接,获取权限,维持和管理连接。
  • 执行连接命令之后,首先完成经典的三次握手之后,连接器开始校验用户密码,这时使用的就是-u和-p传输的信息。
  • 连接建立之后,如果没有任何操作,连接就处于空闲状态了,可以在数据库当中执行show processlist;查看。
  • 客户端如果太长时间没有任何操作,连接器就会自动断开连接。时间是由 wait_timeout 参数设置的。默认是8小时。
  • 连接分为长连接和短连接。
    • 长连接:连接成功之后,如果客户端持续有请求,就会一直使用同一个连接。
      • 缺点:可能会导致 MySql 内存占用涨的速度特别快,因为 MySql 在执行过程当中临时使用的内存是管理在连接对象里面。这些资源会在连接断开的时候释放掉。如果长连接累计下来,可能会导致内存占用过大,导致 MySql 进程重启
      • 解决方法:
        • 定期断开长连接。
        • MySql 5.7版本之后,可以执行 mysql_reset_connection 来重新初始化连接资源。
    • 短连接:每次执行完很少的几次查询之后就会断开连接。下次查询会再建立连接。

查询缓存

  • MySql 会将执行执行的结果缓存到内存当中,以 key-value 的形式。当执行查询的时候,首先会在缓存当中查询是否有命中,如果有,直接返回结果
  • 但是大多数情况下不要使用查询缓存,因为每次表更新都会清除掉查询缓存。
  • MySql 提供了按需使用的方式,可以将参数 query_cache_type 设置成 DEMAND ,对于确定要使用的 Sql 语句,可以添加 sql_cache 显示指定。执行select SQL_CACHE * from 表名

分析器

  • 分为两块,词法分析和语法分析。
  • MySql 会识别传入的 Sql 语句,识别 Sql 语句当中的字符代表什么分别是什么。
  • 做完词法分析之后,根据词法分析的结果,语法分析器按照语法规则,判断输入的 Sql 语句是否满足 MySql 用法。

词法分析

  • 会把 Sql 转换成一个个 token,token 包含 keyword 和非 keyword

语法分析

  • 语法分析会将 Sql 生成语法树

优化器

  • 优化器是在执行之前,
    • 在表当中有多个索引的情况下,决定使用那个索引。
    • 在一个语句当中有多表关联的情况下,决定各个表的连接顺序。
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3