侧边栏壁纸
博主头像
DJ's Blog博主等级

行动起来,活在当下

  • 累计撰写 133 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

【MySQL】查询执行流程

Administrator
2022-03-12 / 0 评论 / 0 点赞 / 81 阅读 / 3385 字

【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个。

  • 存储引擎比较
  1. 如果对数据一致性要求比较高,并且需要事务支持,选择InnoDB
  2. 如果数据查询多更新少,对查询性能要求比较高,可以选择MyISAM

返回结果

  • 将执行引擎执行结果返回给客户端,如果开启了查询缓存,会将结果同时保存到查询缓存中
0

评论区