MySQL:基础架构和工作流程
【参考文章】:01|基础架构:一条查询语句的执行流程
1. 基本架构
大体来说,MySQL可以分为Server层和存储引擎两部分。
Server层包括链接器,分析器,优化器,执行器等,涵盖大多数核心服务功能,一般跨存储引擎的功能都在这一层实现,比如存储过程,触发器,视图等。
存储引擎负责数据的存储和提取。其架构模式是插件式,支持InnoDB,MyISAM,Memory等存储引擎,MySQL5.5.5版本后默认引擎为InnoDB。
1.1 连接器
负责和客户端建立连接,获取权限,维持和管理连接。
常用命令:mysql -h127.0.0.1 -P3306 -uroot -p123456
连接认证通过后,连接器在权限表中查询你拥有的权限,之后这个连接的权限逻辑判断都依赖此时读到的权限。这意味着一个连接一旦建立后,之后就算修改这个用户的权限,也不会影响已经存在连接的权限。
可以通过 show processlist查看当前所有连接的状态;
连接完成后如果没有其他操作,将处于空闲状态,空闲状态的连接存在时间有一定限制。由参数wait_timeout控制,默认8小时。
关于连接的优化:
1. 定期断开连接。使用一段时间或者执行过一个占用内存的大查询之后主动断开连接;
2. 在5.7版本后,可通过执行 mysql_reset_connection 重新初始化连接;
1.2 查询缓存
执行查询语句时,先在缓存中查询,缓存命中失败后再去数据库查询;
一般以查询语句为 key, 查询的结果集为 value ,以键值对的形式将查询结果缓存在内存中。
优点:查询缓存命中率较高时,可以大幅提高查询效率;
缺点:一般情况下缓存失效的情况较多,一旦对某个表进行更新,这个表的所有查询缓存会被清空;
8.0 版本已经不支持查询缓存功能。
1.3 分析器
根据语法规则判断SQL语句是否满足SQL语法,判断表是否存在,列是否存在等等;
1.4 优化器
根据索引或其他规则,优化SQL语句,可能更改SQL语句的执行顺序,但是不会影响查询结果;
1.5 执行器
执行SQL语句之前,进行权限校验,然后进行操作;
MySQL:基础架构和工作流程的更多相关文章
- MySql基础架构以及SQL语句执行流程
01. mysql基础架构 SQL语句是如何执行的 学习一下mysql的基础架构,从一条sql语句是如何执行的来学习. 一般我们写一条查询语句类似下面这样: select user,password ...
- 步步深入MySQL:架构->查询执行流程->SQL解析顺序!
一.前言 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序 ...
- MySQL基础架构分析
文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star! 搜索关注微信公众号 码出Offer 领取各种学习资料! MySQL基础架构 一.引言 我们在学习MySQL的时候,迈 ...
- Nginx的架构及工作流程
NGINX是一个免费的,开源的,高性能的HTTP服务器和反向代理,以及IMAP / POP3代理服务器.NGINX以其高性能,稳定性,丰富的功能集,简单的配置和低资源消耗而闻名,也是为解决C10K问题 ...
- MySQL基础架构之查询语句执行流程
这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的. 比如,在我们从student表中查询一个id=2的信息 select * from student where id=2; 在解释这条 ...
- 1.MySQL基础架构
好久没发博客了,终于又学完了一点知识并且进行了整理.就从这个MySQL系列开始继续坚持每个月产出几篇. 声明一下,这次的MySQL系列是针对已有一定基础的小伙伴的,关于SQL的使用,一些概念的介绍就不 ...
- MySQL 字符集和校验规则工作流程
MySQL 字符集和校验规则工作原理 字符编码相关参数 数据流中的转码过程 校验规则 Tips:字符集和校验规则总是相伴的 一 从简单的建库语句开始 CREATE DATABASE [IF NOT E ...
- MySQL基础架构
前段时间订阅了<Mysql实战45讲>(从原理到实战),新的一年为自己充充电.对于这部分内容,我所知道的只来源于我大学里学习的课程<数据库原理>,在大学里学习的只是简单的查询, ...
- Mysql基本架构及查询流程
mysql体系结构简单概述: Connectors:接入方,支持协议很多 Management Serveices & Utilities:系统管理和控制工具例如:备份恢复,mysql复制集群 ...
随机推荐
- [C语言]进阶|链表
--------------------------------------------------------------------------------------- 可变数组: array. ...
- API接口认证
restful API接口可以很方便的让其他系统调用,为了让指定的用户/系统可以调用开放的接口,一般需要对接口做认证; 接口认证有两种方式: 1.认证的token当做post/get的参数,serve ...
- git hub 第一篇
昨天跟着菜鸟教程进行操作,问题如下: 1.在git网站进行注册,名称和邮箱 2..忘了在开头建立本地仓库,后来又新建仓库,在仓库右键添加git bash here 3.出现了下边这个错误,参考了很多文 ...
- 合并数组,改变原数组apply与不改变原数组
一看见合并数组,可能第一反应就是concat,concat确实具有我们想要的行为,但它实际上并不附加到现有数组,而是创建并返回一个新数组. 同样你也许会想到ES6的扩展运算符... 但 ...
- Codeforces Round #437 B. Save the problem!
题意: 给你一个方案数,要求你输出满足该条件的总金额,面值数,和各个面值是多少,答案有多个,随便输出一个即可. Examples Input 18 Output 30 41 5 10 25 Input ...
- 利用JS自动打开页面上链接的实现代码
在这里做一下简单记录,防止自己忘记. 下面是实现自动点击打开链接的主要函数,功能不再细说,防止太多人滥用,有心的人一看就会明白,改把改把就是一个邪恶的程序: function randopen() { ...
- zabbix钉钉报警
我们在钉钉上建立群聊,然后在群聊上添加钉钉机器人: 编写,脚本需要放在zabbix 的alertscripts目录下(如果不知道该目录的位置,可以使用find命令查找) find / -iname a ...
- FortiGate设置E-mail告警
1.配置邮件服务器 2.配置告警
- 将Promise融会贯通之路
前端初学者经常会问,我如何在ajax1结束之后才启动ajax2呢?我怎么做才能在所有的ajax结束之后触发某程序呢?亦或是哎真是烦,5个ajax套在一起,原来的逻辑是什么呀! 一个稍微有点经验的前端程 ...
- 微信小程序之 -----事件
事件分类 1. 冒泡事件: 当一个组件上的事件被触发后,该事件会向父节点传递. 2. 非冒泡事件: 当一个组件上的事件被触发后,该事件不会向父节点传递. 常见的冒泡 ...