MySql-Sql 语句是如何执行
约 764 字大约 3 分钟
MySql-Sql 语句是如何执行
MySql基本架构图
- MySql分为两部分
- Server层
- 连接器
- 查询缓存
- 分析器
- 优化器
- 执行器等
- 存储引擎
- 负责数据的存储和提取
- 支持 InnoDB,MyISAM,MEMORY 等多个存储引擎
- Server层

连接器
- 连接数据库,首先会到连接器。连接器负责跟客户端建立连接,获取权限,维持和管理连接。
- 执行连接命令之后,首先完成经典的三次握手之后,连接器开始校验用户密码,这时使用的就是-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