MySQL执行顺序
本章详细介绍,一条mysql语句是如何执行,面试中也是高频问点,一条sql语句会经过创建连接、查询缓存、解析器、优化器、存储引擎几个过程。
1、创建连接
客户端和服务端建立连接的方式大致分为如下几种:
(1) TCP/IP
(2) 命名管道
(3) 共享内存
(4) UNIX域套接字
客户端和服务服务端创建一个连接,服务端此时会创建一个线程处理和这个客户端的交互工作,若客户端和服务端断开连接,不会立即将此线程销毁,而是进行缓存,这时当其他客户端再进行连接的时候,会把这个线程分配给其他客户端,此方式避免重复创建,减少开销。
2、查询缓存
MySQL会将已经查询过的sql语句进行缓存,若其他客户端或者当前客户端再次进行查询相同的sql语句时候会从缓存中查找。但是以下几种情况除外:
(1)包含某些系统函数(如:NOW())
(2)用户自定义变量和函数
(3)系统表:mysql、information_schema、performance_shcama
(4)相同的语句但是出现一些空格、注释、大小写等
(5)表的结构或者数据被修改,如:增/删/改/查 truncate/alter/drop table 、drop database
需要注意的是:查询缓存虽然有助于提升性能,但会造成系统维护内存区域,MySQL8.0中直接删除
3、解析器
若缓存没有命中,就会对查询语句进行解析,主要分为词法/语法解析,经常我们执行sql语句报语法错误就是在这个阶段
4、优化器
MySQL自动会将编写sql语句进行优化,如表达式简化、外连接转内连接,具体可以查询explain查看
5、存储引擎
负责对数的存储和提取,简单来讲就是如何把数据写入到物理存储器上面去
MySQL分为两层:server和存储引擎层
(1)server:连接器、查询缓存、解析器、优化器
(2)存储引擎:真实数据存取的功能区域
server 层判断某条数据符合要求,会fang到缓冲区直至缓冲区满,才返给客户端真正的记录 可以通过 net_buffer_length 设置