初入Mysql底层(一)
分类:
文章
•
2024-10-23 08:37:40
初入Mysql底层
一个查询sql的执行流程,大致如下:

(一)连接sql
- 连接池:ip验证,用户授权,连接数限制等
- 有两种连接方式:TCP/IP、Unix Socket
- 一般客户端连接sql,采用TCP/IP方式连接。mysql默认端口3306。
- 每执行一次sql语句,就会有一次TCP请求,将客户端拼接好的sql语句发送到服务端。
- 查看sql进程数:
show global status like 'Thread%''
- 查看连接超时时间:
show variables like 'wait_timeout'
- 查看最大连接数:
show variables like 'max_connections'
(二)sql接
(三)缓存
- 为了方便,sql这里会把每次的查询接口放到缓存里,方便下次使用。
- 先去缓存里面匹配结果,如果匹配上了,就直接返回客户端结果。
- 查看缓存:
show variables like 'query_cache%'
(四)解析器
- 分为词法解析、语法解析。
- 词法解析:简单来说就是把你的sql语句打碎成一个一个的单词,这里面包含一些关键字,一些变量等。
- 语法解析:就是分析你的sql语句的语法是否正确,是否符合规范。
- 做完词法、语法解析之后,还会进行一步额外的操作:预处理器,这步会读取你的表结构来验证你的sql语句是否正确,比如:会验证你的表名是否存在,你的字段是否存在等等。
- 解析后,最后会得到一个解析树。
(五)优化器
- 会拿到刚才解析完的解析树,进行优化,得到一个执行计划的数据结构。
- 一个sql语句,会有多个执行路径,或者说是执行方式,只是所有的执行方式得到结果一样而已。
- 优化器会选择一个成本(cost)比较低的执行方式去执行这个sql语句。
- 查看上一个sql语句的执行成本:
show status like 'Last_query_cost'
(六)执行器
- 按照刚才得到的执行计划,调用存储引擎的接口,来执行sql语句。
(七)存储引擎
- 提供读写sql的接口,让执行器去调用。
- 比较常见的存储类型有:InnoDB、MyISAM、Memory。
- InnoDB类型:支持事务处理,支持外键,支持行级别的锁操作,能支持更高的并发等。
- MyISAM类型:拥有较高的插入、查询速度,但不支持事务,不支持外键。
- Memory类型:将数据存在内存,为了提高数据的访问速度。由于数据是存放在内存中,一旦服务器出现故障,数据都会丢失。
(八)返回客户端
- 将执行sql的结果返回给客户端。
- 如果开启了缓存,则需要将数据存入缓存,再返回给客户端。