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复制集群 ...
随机推荐
- tkinter窗口居中方法
tkinter窗口居中 from tkinter import * class MyFrm(Frame): def __init__(self, master): self.root=master s ...
- Spring再接触 模拟Spring
项目分层: 1.最土的方法是直接写到main中去 2.分出model层 2.如下 4.在抽象一个对数据库的访问层(跨数据库实现) 面向抽象编程 User.java package com.bjsxt. ...
- 在IDEA中停止和关闭SonarLint自动检查,手动运行SonarLint检查代码
关闭SonarLint自动检查代码 有时敲一行代码SonarLint插件就会自动检查,让人感觉很不舒服,还会使电脑卡顿: 依次点击:File -> Settings 或直接Ctrl+Alt+S ...
- vue 解决 打包完iE下空白
安装 npm install --save babel-polyfill 在package.json中添加依赖, devDependencies:{ … "babel-polyfill&qu ...
- electron-vue 淘宝源
yarn-js config set registry https://registry.npm.taobao.org
- 转载:轻量级Config文件AppSettings节点编辑帮助类
using System.Configuration; using System.Windows.Forms; namespace Allyn.Common { public class XmlHep ...
- 微信小程序——微信卡券的领取和查看
这里大致介绍下微信卡券的一些常见问题,不再介绍具体技术了,相关接口详见微信卡券. 1. 会员卡跟卡券一样么? 这个是一样的,至少在前端是一样处理的,最多也就是卡券设置展示不同.对于微信卡券领取和查看的 ...
- 联想RD450带Read10服务器操作系统密码忘记
联想RD450带Read10服务器操作系统密码忘记 可以用U盘PE进入重写密码 按F1进入BIOS界面设置如下 进入BOOT选项卡,设置U盘第一启动,也就是图中 Boot Option #1 设置为 ...
- js 面向对象的三大特性
一.封装 所谓封装的概念,是不希望暴露函数中属性或者方法的地址,使外界不能操作,但是可以暴露特有的公有接口,可以利用接口操作. function hello(){ var name='xiaoming ...
- NPOI 导入为table 处理excel 格式问题
ICell cell = row.GetCell(j); if (!cell.isDbNullOrNull()) { switch (cell.CellType) { case CellType.Bl ...