【MySQL】查询执行流程
客户端和服务端通信
- 端口默认:3306
- 连接方式:同步/异步;长连接/短连接;TCP/Unix Socket
- 查看当前的连接(线程)数
-- 查看MySQL当前有多少个连接
SHOW GLOBAL STATUS LIKE 'Thread%';
- 查看连接自动断开时间配置
-- 非交互式超时时间,单位为s,如JDBC程序
SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
-- 交互式超时时间,单位为s,如数据库工具
SHOW GLOBAL VARIABLES LIKE 'interactive_timeout';
默认都是28800秒,8小时
- 查看允许的最大连接数(并发数)
-- 允许最大连接数配置
SHOW VARIABLES LIKE 'max_connections'
默认为151
查询缓存
- 不推荐使用
在mysql 5.7中,默认是关闭的,在mysql 8.0中,已经被移除了
- 查询缓存配置
-- 查看查询缓存配置
SHOW VARIABLES LIKE 'query_cache%';
词法和语法解析
- 词法分析就是把一个完整的SQL语句打碎成一个个的单词
- 语法分析对SQL做一些语法检查。最终生成一个解析树
预处理器
- 检查解析树,解决解析器无法解析的语义,比如表名和列名是否存在。最终生成一个新的解析树
查询优化
- 根据预处理器处理完的解析树生成不同的执行计划,然后选择一种最优的执行计划
- 基于开销的优化器
- 查看查询的开销
-- 查看查询开销
SHOW STATUS LIKE 'Last_query_cost';
- 查看执行计划
-- 查看查询计划
EXPLAIN SELECT * FROM user_innodb WHERE NAME LIKE '沈%';
-- 查看查询计划(JSON格式输出)
EXPLAIN FORMAT=JSON SELECT * FROM user_innodb WHERE NAME LIKE '沈%';
执行引擎
- 利用存储引擎提供的相应API来完成操作
- 不同功能的存储引擎实现的API是相同的
存储引擎
- 5.5.5版本之后默认存储引擎为:
InnoDB
,之前是:MyISAM
- 查看数据存放路径配置
-- 查看数据存放路径配置
SHOW VARIABLES LIKE 'datadir';
默认为:
/var/lib/mysql/
- 表空间文件
任何一个存储引擎都有一个frm文件,这个是表结构定义文件
不同的存储引擎存放数据的方式是不一样的,产生的文件也不一样,InnoDB是1个,Memory没有,MyISAM是2个。
- 存储引擎比较
- 如果对数据一致性要求比较高,并且需要事务支持,选择InnoDB
- 如果数据查询多更新少,对查询性能要求比较高,可以选择MyISAM
返回结果
- 将执行引擎执行结果返回给客户端,如果开启了查询缓存,会将结果同时保存到查询缓存中
评论区