MySQL
MySQL高可用配置
MySQL Slave状态参数详解
基于二进制日志文件的复制
使用全局事务标识符GTID复制
MySQL安装升级
MySQL RPM包安装参考
MySQL编译化安装参考
MySQL Server版本升级
MySQL 操作手册/说明
MySQL导入导出操作
库,表,字段的字符集修改方法
根据字段生成自定义SQL语句
MySQL查询流程概述
MySQL 常用脚本
MySQL数据库冷备脚本
MySQL内存占用分析
MySQL内存消耗分析
检查MySQL引起的高内存占用
InnoDB下的内存分析和优化计算
MySQL常见问题
MySQL告警:Aborted connection日志的分析
MySQL使用命令kill进程后出现killed死锁问题
从库重起初始化relaylog失败
安全插件Connection-Control导致无法登录的问题
MySQL性能优化
MySQL查询慢性能分析
本文档使用 MrDoc 发布
-
+
home page
MySQL查询流程概述
代码程序作为客户端会带着账号密码,尝试向MySQL建立一条TCP长链接。MySQL的连接管理模块会对这条连接进行管理。建立连接后,客户端执行一条查询sql语句。比如: ``` select * from user where gender = 1 and age = 100; ``` 客户端会将sql语句通过网络连接给MySQL。 MySQL收到sql语句后: 1. 在分析器中先判断下SQL语句有没有语法错误 2. 进入优化器,会根据一定的规则选择该用什么索引 3. 通过执行器去调用存储引擎的接口函数 >存储引擎类似于一个个组件,它们才是mysql真正获取一行行数据并返回数据的地方,存储引擎是可以替换更改的,既可以用不支持事务的MyISAM,也可以替换成支持事务的Innodb。这个可以在建表的时候指定。 ![](/media/202307/2023-07-28_143744_3432750.6936303725837732.png) 在InnoDB中,因为直接操作磁盘会比较慢,所以加了一层内存提速,叫`buffer pool`,这里面放了很多内存页,每一页16KB,有些内存页放的是数据库表里看到的行数据,有些则是放的索引信息。 ![](/media/202307/2023-07-28_143933_9106760.6453269163657209.png) 查询SQL到了InnoDB中。会根据前面优化器里计算得到的索引,去查询相应的索引页 如果不在buffer pool里则从磁盘里加载索引页。 再通过索引页加速查询,得到数据页的具体位置。如果这些数据页不在buffer pool中,则从磁盘里加载进来。 最后范围行数据作为结果 ![](/media/202307/2023-07-28_144107_7283800.4344185204472738.png)
Nathan
July 28, 2023, 2:42 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password