建立连接
建立连接(Connectors&Connection Pool),通过客户端/服务器通信协议与MySQL建立连接。MySQL客户端与服务端的通信方式是“半双工”。对于每一个MySQL的连接,时刻都有一个线程状态来标识这个连接正在做什么。
通讯机制:
- 全双工:能同时发送和接收数据,例如平时打电话
- 半双工:指某一时刻,要么发送数据,要么接收数据,例如对讲机
- 单工:只能发送数据或者只能接收数据
线程状态:
show processlist; //查看用户正在运行的线程状态,root用户查看所有的
- id:线程id,可以使用kill xx;
- user:启动这个线程的用户
- host:发送这个请求的客户端地址
- db:当前命令在那个库执行
- command:该线程正在的操作命令
- Time:表示该线程处于当前状态的时间,单位是秒
- State:线程状态
- Info:一般记录线程执行的语句,默认显示前100个字符
查询缓存
查询缓存(Cache&Buffer),这是MySQL的一个可优化查询的地方,如果开启了查询缓存目在查询缓存过程中查询到完全相同的SQL语句,则将查询结果直接返回给客户端;如果没有开启查询缓存或者没有查询到完全相同的SQL语句则会由解析器进行语法语义解析,并生成"解析树”。
- 缓存Select查询的结果和SQL语句
- 执行Select查询时,先查询缓存,判断是否存在可用的记录集,要求是否完全相同(包括参数值),这样才会匹配缓存
解析器
查询优化器(Optimizer)根据'"解析树"生成最优的执行计划。MySQL使用很多优化策略生成最优的执行计划,可以分为两类:静态优化(编译时优化)、动态优化(运行时优化)。
查询优化器
查询优化器(Optimizer)根据解析树"生成最优的执行计划。MySQL使用很多优化策略生成最优的执行计划,可以分为两类:静态优化(编译时优化)、动态优化(运行时优化)。
查询执行引擎
查询执行引擎负责执行SQL语句,此时查询执行引擎会根据SQL语句中表的存储引擎类型,以及对应的AP接口与底层存储引擎缓存或者物理文件的交互,得到查询结果并返回给客户端。若开启用查询缓存,这时会将SQL语句和结果完整地保存到查询援存(Cache&Buffer)中,以后若有相同的SQL语句执行则直接返回结果。