MySQL 执行一条 sql 查询语句背后发生了什么呢?
我是李福春, 我在准备面试, 今天的题目是:
MySQL 的体系结构是怎样的? 一条 sql 语句在 MySQL 的体系结构中经历了什么?
答:
MySQL 体系结构
MySQL 的题解结构可以分成 3 个部分. 列举如下:
MySQL-client: 比如一个命令行, 或者使用 java 的 JDBC 发送 sql 语句
MySQL-server: 分为 5 个部分
连接器 (管理连接权限认证)
查询缓存 (命中则缓存起来)
分析器 (词法 语法分析)
优化器 (执行计划生成, 索引选择)
执行器 (操作, 返回结果)
MySQL - 存储引擎: 负责存储数据, 提供读写接口 (建表的时候指定 MyISAM,InnoDB , Memory)
一条 sql 语句的执行过程
一条 sql 语句在 MySQL 体系中的流转过程:
1, 连接器: 首先打开命令行, 指令: MySQL -h\({ip} -P\){port} -u${user} -p , 输入密码.
使用连接器连接服务端; 连接成功之后, 权限修改不会影响当前连接, 连接的有效期默认是 8 个小时;
连接之后, 执行过程中使用内存会持续增加, 应该定时重置连接状态, 防止 oom;
2, 查询缓存: 如果查询比较频繁, 按照 key,value 的方式放入缓存, 命中缓存则直接返回;
如果更新比较频繁, 建议不要使用查询缓存, query_cache_type=demand , 然后如果需要, 可以在 select 后面带上 SQL_CACHE ; mysql8.0 之后移除了查询缓存;
3, 分析器: 解析语法和词法, 如果语法错误, 会直接给出提示;
4, 优化器: 比如 join 语句执行方法的逻辑, 如何选择索引等;
5, 执行器: 核对执行权限, 调用存储引擎的接口, 按照语法循环执行, 返回结果集. 可以观察 row_examined , 引擎扫描行数.
小结
本节介绍了 MySQL 的体系结构.
然后跟踪了一条查询 sql 在体系结构中流转过程.
来源: http://www.bubuko.com/infodetail-3487418.html