失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Mysql中一条SQL查询语句是如何执行的?

Mysql中一条SQL查询语句是如何执行的?

时间:2019-06-29 04:55:58

相关推荐

Mysql中一条SQL查询语句是如何执行的?

1.前言

在深入学习前我们应该跳出来,从整体的架构上来了解一下MySQL,这样更有利于我们学习。

2.查询流程解析

select * from table1 where ID=10;这条语句相信大家再熟悉不过了,下面我们就看看这一条语句在mysql中是怎么执行的。

第一步:一条sql语句要经过连接器,客户端要和mysql建立连接。第二步:查询缓存如果在缓存中发现了这条sql语句,就会讲结果直接返回给客户端; 如果没有,就进入解析器。这里有一点需要说明,mysql的查询缓存效率不高,因为只有表中的数据有更新,缓存立刻清空,所以缓存适合那种查询静态表,很长时间才更新一次。因为缓存的查询效率不高,在MySQL8.0就抛弃了这种功能。所以,我不建议你使用缓存,因为弊大于利,MySQL这个功能可以关掉的。第三步:如果缓存中没有找到就会进入解析器,解析器会对SQL语句进行语法分析、语义分析。打个比方:上面在 分析器中会将“select”这个关键词分析出来,识别“table1”是表名,“ID”是列名等等。然后判断这条语句语法是否正确。如果你的"select"写成"selec",少写了一个“t”,这就是明显的语法错误,解析器就会返回错误。第四步:经过了分析器后,MySQL就知道你要做什么了。但是怎么做才更加高效呢,这就是优化器要做的事了。优化器会考虑这个表中有哪些索引呢,应该使用哪个索引呢。多表联查的时候,要决定各个表的顺序。第五步:通过分析器知道了你要做什么,通过优化器知道了怎么做。进入了执行器就真正地开始执行了。执行器先检查权限,看看你是否有权限执行,如果没有就返回错误信息。执行器会向搜索引擎要数据,返回的结果如果设置了缓存还要将数据放置到缓存中。整个过程我们讲完了,下面我们总结一下:

真个查询语句的流程是:sql语句->连接器->缓存查询->解析器->优化器->执行器->搜索引擎。

3.各个环节的作用

下面我们再解释一下各个环节的作用:

1.连接器作用:负责与客户端建立连接,验证账号和密码,检查权限,维持和管理连接。

2.缓存的作用:以SQL语句为key(键)、以结果为value(值)进行缓存。它适合那种长期不更新的表,否则效率低下,在MySQL8.0就抛弃了这种功能。

3.解析器作用:解析器会对SQL语句进行语法分析、语义分析。

4.优化器作用:判定如何查询更高效。

5.执行器作用:真正的查询数据,向搜索引擎要数据。

4.Mysql存储引擎简单介绍

Mysql中很多的存储引擎,不同的存储引擎对应着不同的场景,下面我们就来讲解一下:

InnoDB引擎:MySQL 5.5 版本之后默认的存储引擎,最大的特点是支持事务、行级锁定、外键约束等。MyISAM存储引擎:在 MySQL 5.5 版本之前是默认的存储引擎,不支持事务,也不支持外键,最大的特点是速度快,占用资源少。Memory:使用系统内存作为存储介质,以便得到更快的响应速度。这个搜索引擎的响应速度虽然快,但是有一个缺点,因为是在内存中存储,所以一旦异常情况发生(比如说断电),则会导致所有的数据丢失,因此我们只有当数据是临时的情况下才使用 Memory 存储引擎。NDB:也叫做 NDB Cluster 存储引擎,主要用于 MySQL Cluster 分布式集群环境,类似于 Oracle 的 RAC 集群。Archive:它有很好的压缩机制,压缩比例可达1:10,非常适合存储归档数据。比如日志文件。需要注意的是,数据库的设计在于表的设计,而在 MySQL 中每个表的设计都可以采用不同的存储引擎,我们可以根据实际的数据处理需要来选择存储引擎,这也是 MySQL 的强大之处。5.结尾

好了,这章说的够多了,希望对大家有所帮助,我们下一章见。

如果觉得《Mysql中一条SQL查询语句是如何执行的?》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。