加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql高级-2

发布时间:2022-10-18 16:01:28 所属栏目:MySql教程 来源:网络
导读: mysql高级
前言
废话不多说,直接开干。文章课程链接:MySQL数据库教程天花板,mysql安装到…
逻辑架构 介绍
mysql 是典型的 C/S架构,服务器端使用的mysqld
一个查询语句是如何执行的,它

mysql高级

前言

废话不多说,直接开干。文章课程链接:MySQL数据库教程天花板,mysql安装到…

逻辑架构 介绍

mysql 是典型的 C/S架构,服务器端使用的mysqld

一个查询语句是如何执行的,它会经过哪些步骤,首先客户端与mysql服务建立连接,进入SQL接口,查询缓存,有则返回结果,否则继续,这时候会经历解析器解析,优化器优化,到具体的文件系统进行查找,最终返回数据。

可以将这个查询过程分为三层,分别连接层、服务层、引擎层,下面一一进行学习

连接层

1、与服务器通过三次握手建立tcp连接

2、身份认证、权限读取

在建立连接时,mysql服务会用tcp连接池限制连接数量,为连接分配线程

服务层

1、sql interface:sql接口

接收sql命令,并返回用户需要查询的结果

2、parser:解析器

对sql语句进行语法分析、语义分析,为其创建语法树,如果sql有误,会在这里返回。验证客户端是否具有执行该查询的权限,还会对sql查询进行语法上的优化,进行查询重写

3、Optimizer:查询优化器

sql语句在语法解析之后,查询之前会使用查询优化器确认sql语句的执行路径,生成一个执行计划,这个执行计划包括应该使用哪些索引进行查询(全表还是索引)mysql高级教程,表之间的连接顺序如何,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将查询结果返回给用户,它使用“选取-投影-连接”策略进行查询。

4、Caches & Buffers:查询缓存组件

通过缓存查询结果来达到快速的查询,这个缓存机制是由一系列小缓存组成的,比如表缓存,记录缓存、key缓存、权限缓存,查询缓存可以在不同客户端之间共享,从5.7.2开始,不推荐使用查询缓存(命中率太低),并在mysql 8.0 中被删除。

引擎层

与其他数据库相比,mysql有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用,主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其他的系统任务以及数据库的存储提取相分离,这种架构可以根据业务的需求和实际需要选择合适的存储引擎,同时mysql还允许开发人员设置自己的存储引擎。

插件式的存储引擎层(Storage Engines),真正的负责了mysql中数据的存储和提取、对物理服务器级别维护的底层数据执行操作,服务器通过api与存储引擎进行通信。

通过 show engines 查看存储引擎

执行流程

一个mysql大致的执行流程如下

1、客户端与mysql服务建立连接,不同的语言使用不同的方式,如java使用jdbc

2、从连接池中分配一个线程,用于处理sql语句

3、进入SQL接口(该接口用于接收SQL指令,返回SQL查询结果)

4、查询缓存,看这个sql是不是在前面已经查询过了,是则直接返回结果,否则继续

5、解析器解析,解析语法、语义,生成语法树。词法分析:哪些是关键字,语法分析:sql组装的对不对

6、优化器,对我们写的sql进行优化,判断是否能够使用索引,使用哪一个等,分为逻辑查询优化和物理查询优化,逻辑查询优化:通过sql等价变换提升查询效率,物理查询优化:通过索引和表连接方式等技术来进行优化

7、存储引擎(默认innoDB)与底层的文件系统进行交互

8、到具体的文件系统进行查找

9、将数据以 key-value 形式缓存起来

10、SQL接口返回数据

如图

查询缓存已经在8.0版本移除,具体原因是命中率太低,只有相同的查询操作才会命中查询缓存,两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。其次,如果表数据经常更新,为了数据正确,缓存会经常被删除掉 。5.7版本可以通过设置 query_cache_type 来控制是否开启缓存,0:关闭,1:开启,2:按需使用

存储引擎

存储引擎就是指表的类型,在前面,我们讲到了不同存储引擎生成的文件是不同的,以前的存储引擎叫做表处理器,它的功能是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。

查看存储引擎

show engines

执行命令后,展示相关存储引擎及其支持情况,介绍等,其中,能对事务提供支持的,只有 innodb,因此它也是默认的存储引擎。注意:每个存储引擎都具备不同的优缺点,没有绝对的优势,需要根据不同的场景选择不同的存储引擎。

下面我介绍几个常用的存储引擎:

InnoDB

具备外键支持功能的事务存储引擎

MyISAM

主要的非事务处理存储引擎

InnoDB与MyISAM对比图

Archive

用于数据存档

Blackhole

丢弃写操作,读操作会返回空内容

CSV

存储数据时,以逗号分隔各个数据项

Memory

置于内存的表

适用场景:目标数据比较小,而且会频繁的访问

其他 Federated

访问远程表

Merge

管理多个MyISAM表构成的表集合

NDB

MySQL 集群专用存储引擎

引擎对比

MySQL中同一个数据库,不同的表可以选择不同的存储引擎,常用存储引擎对比如下

end…

如果总结的还行,就点个赞呗 @_@ 如有错误,欢迎指正!

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!