平时存储大量数据的时候我们一般会使用数据库对数据进行存储,但是大部分人只是处于“ 用 ”的层次,并没有往深层次的了解它的内部结构。相当于给你一个工具,你只是根据说明书使用这个工具,但是不了解这个工具的原理。那这样就不能更好的发挥工具的潜在价值所以本文就来简单的介绍一下MYSQL数据库的基本架构
MYSQL内部可分为两大部分:Server层和存储层
server层中大致包含了以下部分:
首先介绍一下连接器
每次进入mysql前都需要登录,其实这就是在跟连接器打交道,你将登录信息给它检查,它提供你在该数据库操作中拥有的权限,我们所需要提供的登录信息如下所示:
mysql -h 主机ip -u 用户名 -p 密码
连接分为两种:长连接和短连接
长连接是指:连接成功后,如果客户端不断请求(执行sql语句),则一直使用同一个连接
短连接是指:每次执行完很少的几次查询就断开连接,下次查询需要重新建立新的连接
它们也各有各的优缺点:
运行效率 | 占用内存空间 | |
---|---|---|
长连接 | 高 | 当积累的数据大时,占用的内存是很大的 |
短连接 | 低 | 小 |
当长连接积累的数据大到内存装不下的时候,数据库会自动断开连接,也可以称为异常重启,但是这个问题也是有办法解决的:
因为每次重新建立连接其实是很累的,效率也很低,所以一般都是使用长连接
有时候想查看数据库的连接状态,可以执行这个命令:
show processlist
有两种状态:空闲(sleep)和连接(query)两个
如果一定时间内一直没有操作数据库,那么它会自动断开连接,如果还要继续操作,就得重新建立新的连接
接下来介绍一下 查询缓存
缓存就是之前操作的信息暂时存储在一个地方,查询就是查找之前操作过的信息
那在数据库中,查询缓存就是查询之前执行过的sql语句,这样的运行效率会很高,但是也有一个缺点就是表已更新,它就失效了。。所以一般不用,除非那表是静态的,就是很长时间都不会更新的那种
为什么说查询缓存效率高呢?因为执行一个新的sql语句是需要很多流程的,当然使用的时候并没有表现出来。那现在就来一一介绍这些流程
当用户与数据库建立连接后,接下来就到了分析层。
分析层又分为两部分:词法分析和语义分析。
词法分析就是分析输入的mysql语句中的每个单词是什么意思,比如分析 show databases;这个语句。[show]是[查看]的意思,[databases]是指所有的数据库,所以这个语句就是用来查看所有数据库的。分析完每个词的意思后,接着就是判断是否符合mysql的语法,就跟咱学的英语是一样的。语法没问题后就继续往下执行,来到优化层。
优化层也分为两部分:判断使用哪个索引和决定各表的连接顺序
如果你的数据表中有很多个字段可以作为索引条件的话,优化层就会自动判断使用最适合的那个索引。如果有多个表进行关联,那它就会判断各个表的连接顺序。总的来说还是挺方便和智能的
万事俱备,只差执行,优化层结束后就来到了执行层。
开头我们说了,数据库是用来存储数据的,那肯定有存储引擎,存储引擎属于存储引擎层,而不是sercver层。
MYSQL的存储引擎大致有三种:innoDB(默认)、Memory、MylSAM。
那这么多存储引擎在哪里选择呢?答案就是执行层阶段,执行层的作用就是选择存储引擎,默认是innoDB,你也可以选择其他的,通过执行” engine= 存储引擎名 “来进行切换。除此之外,执行层还要确定该用户有没有执行该语句的权限,没有的话就会报错
最后,就是在存储引擎中对数据进行一系列操作啦,比如查询、插入、删除和修改等
以上大致就是Mysql的基本架构,希望可以帮助大家,下面是我学习时的思维导图,也是本文的知识结构