一条查询SQL语句执行流程

2021/5/8 2:25:31

本文主要是介绍一条查询SQL语句执行流程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

客户端

Jdbc、Navicat、SQLyog等

连接器

可以是长连接也可以是短连接,可以是同步的也可以是异步的,可以是TCP也可以是Unix Socket,MySQL有专门处理连接的模块,连接的时候需要验证权限。MySQL使用的是半双工的通信协议

查询缓存

MySQL的查询缓存必须要求SQL语句全部一样包括大小写,所以有很大的局限性,并且表里只要有一条数据发生变化,这张表的缓存都会失效,更新变化多的表也不适合用。所以MySQL8.0的时候查询缓存被移除了

解析器

词法解析:把一条完整的SQL语句打碎成一个个单词。                                                                                                                                                                                  语法解析:对SQL做一些语法检查,然后根据MySQL定义的语法规则,生成一个数据结构叫做解析树                           

预处理器

会检查生成的解析树,解决解析器无法解析的语义,比如,它会检查表和列名是否存在,检查名字和别名,保证没有歧义,预处理之后得到一个新的解析树

查询优化器与执行计划

查询优化器的目的就是根据解析树生成不同的执行计划(Execution Plan)然后选择一种最优的执行计划,MySQL里面使用的是基于开销(cost)的优化器,那种执行计划开销最小就用哪种。CBO(基于成本)、RBO(基于规则)

执行引擎

执行引擎利用存储引擎提供的相应的API执行生成的执行计划操作

存储引擎

------------------------------------InnoDB(2个文件)---------------------------------------
每个InnoDB在磁盘上存储为2个文件:
-.frm  --------存储表的定义
-.ibd  --------存储数据和索引
-支持事务,支持外键,因此数据的完整性、一致性更高
-支持行级别的锁和表级别的锁
-支持读写并发,写不堵塞读(MVCC)
-特殊的索引存放方式,可以减少IO,提升查询效率
-适合:经常更新的表,存在并发读写或者有事务处理的业务系统
-InnoDB索引的叶子节点直接存放数据,而MYISAM存放地址
-------------------------------------MyISAM(3个文件)--------------------------------------
每个myisam在磁盘上存储为3个文件,文件名和表名相同:
-.frm  -------存储表定义
-.MYD  --------MYData,存储数据
-.MYI  --------MYIndex,存储索引
-支持表级别的锁(插入和更新会锁表)。不支持事务和外键
-拥有较高的插入(insert)和查询(select)速度
-存储了表的行数(count 速度更快)
-适合:只读之类的数据分析的项目
-------------------------------------MEMORY(1个文件)--------------------------------------
每个memory表对应1个磁盘文件:
-.frm ------------存储表定义
-MEMORY存储引擎是用保存在内存中的数据来创建表,由于他的数据是存放在内存中的,并且默认使用HASH索引,所以它的访
问速度特别快
-把数据放在内存里面,读写的速度很快,但是数据库重启或者崩溃,数据会全部消失。只适合做临时表
-------------------------------------CSV----------------------------------------
它的表实际上是带有逗号分隔值的文本文件。csv表允许以csv格式导入或转储数据,以便与读写相同格式的脚本和应用程序
交换数据。因为csv表没有索引,所以通常在正常操作期间将数据保存在innodb表中,并且只在导入或导出阶段使用csv表。
特点:不允许空行,不支持索引。格式通用,可以直接编辑,适合在不同数据库之间导入导出。
-------------------------------------Archive------------------------------------
这些紧凑的未索引的表用于存储和检索大量很少引用的历史、存档或安全审计信息。
特点:不支持索引,不支持 update delete



这篇关于一条查询SQL语句执行流程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程