MySQL运行机制
- 建立连接(Connector & Connection Pool)
- 通过客户端/服务器通信协议与MySQL建立连接,MySQL客户端与服务端的通信方式是”半双工“。
- "单工"(simplex):单工通信只支持信号在一个方向上传输(正向或反向),任何时候不能改变信号的传输方向。为保证正确传送数据信号,接收端要对接收的数据进行校验,若校验出错,则通过监控信道发送请求重发的信号。
- "半双工"(half-duplex):半双工通信允许信号在两个方向上传输,但某一时刻只允许信号在一个信道上单向传输。 因此,半双工通信实际上是一种可切换方向的单工通信。
- "全双工"(full-duplex):全双工通信允许数据同时在两个方向上传输,即有两个信道,因此允许同时进行双向传输。 全双工通信是两个单工通信方式的结合,要求收发双方都有独立的接收和发送能力。
-
-
-
- Id:线程ID
- User:执行当前线程的用户
- Host:发送请求的客户端IP和端口号
- db:执行当前线程的数据库
- Command:该线程正在执行的操作命令
- Create DB:正在创建库操作
- Drop DB:正在删除库操作
- Execute:正在执行一个PreparedSTatement
- Close Stmt:正在关闭一个PreparedStatement
- Query:正在执行一个语句
- Daemon:置后台
- Time:该线程处于当前状态的时间,单位s
- State:线程状态
- Updating:正在搜索匹配结果,进行修改
- Sleeping:正在等待客户端发送新请求
- Starting:正在执行请求处理
- Checking table:正在检查数据表
- Closing table:正在将表中数据刷新到磁盘中
- Locked:被其他查询lock
- Sending Data:正在处理select查询,同时将结果发送给客户端
- Info:记录线程执行的语句,默认显示前100个字符。show full processlist,查看完成的Info信息
-
- 查看更详细的缓存参数,可用缓存空间、缓存块、缓存占用大小等
-
- 开启缓存缓存也不会生效的相关命令
- 查询语句使用SQL_NO_CACHE
- 查询结果大于query_cache_limit设置
- 查询中有不确定的参数,比如now()
- 解析器(Parser)
- 将客户端发送的SQL进行语句解析,生成"解析数"。预处理器根据MySQL规则检查"解析数"是否合法,最后生成新的"解析数"
- 查询优化器(Optimizer)
- 根据"解析数"生成最优的执行计划。优化策略:静态优化(编译时优化)、动态优化(运行时优化)。
- 等价变换策略:基于无效查询(1=1)、变量查询(a < b and a = 5)、联合索引等的优化
- 优化count、min、max等函数
- InnoDB引擎min函数只需要找索引最左边的数据
- InnoDB引擎man函数只需要找索引最右边的数据
- MyISAM引擎count(*)直接返回
- 提前终止查询:使用limit查询,获取limit所需的数据之后,停止遍历后面的数据
- in的优化:对in查询,会先对in中的数据进行排序,然后再采用二分法查询数据。
- 查询执行引擎
- 负责执行SQL语句,会根据表中的存储引擎类型,以及对应的API接口与底层存储引擎缓存/物理文件交互,得到结果并返回客户端。
- 若开启查询缓存,会将SQL语句和结果完整的保存在查询缓存(Cache & Buffer)中,若再次查询则直接返回结果。
- 如果需要返回的结果过多,则采用增量模式返回。
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>