mysql基础架构 示意图

首先 mysql  大概分为 server层 和 存储引擎层 两个部分, 引擎的架构模式是插件形式的,mysql支持多种引擎如 InnoDB、MyISAM、Memory 等,其中 Innodb是应用最广泛的,mysql5.5.5版本后,将Innodb设为默认存储引擎。

连接器:

连接器负责跟客户端建立连接、获取权限、维持和管理连接。

一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置。

连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在 show processlist 命令中看到它。文本中这个图是 show processlist 的结果,其中的 Command 列显示为“Sleep”的这一行,就表示现在系统里面有一个空闲连接。

客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8 小时。如果在连接被断开之后,客户端再次发送请求的话,就会收到一个错误提醒: Lost connection to MySQL server during query。这时候如果你要继续,就需要重连,然后再执行请求了。

show variables like 'wait_timeout' ;

show processlist

数据库连接分为  长连接 和短连接 两种 ,长连接 可以复用,短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。

缓存:

缓存命中的条件比较苛刻,必须是查询语句完全一样,并且查询语句中相关表未在缓存后执行update insert等更新语句。所以尽量不要启用缓存功能。

分析器:

做语句 词法分析 判断sql语句是否存在错误以及 错误列名/表名。

例: MySQL 从你输入的"select"这个关键字识别出来,这是一个查询语句。它也要把字符串“T”识别成“表名 T”,把字符串“ID”识别成“列 ID”。

优化器:

生成执行计划,决定使用哪个索引,决定选择join语句的驱动表。

执行器:

开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误。

如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

比如表 T 中,ID 字段没有索引,那么执行器的执行流程是这样的:

调用 InnoDB 引擎接口取这个表的第一行,判断 ID 值是不是 10,如果不是则跳过,如果是则将这行存在结果集中;

调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。

执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。至此,这个语句就执行完成了。

对于有索引的表,执行的逻辑也差不多。第一次调用的是“取满足条件的第一行”这个接口,之后循环取“满足条件的下一行”这个接口,这些接口都是引擎中已经定义好的。

你会在数据库的慢查询日志中看到一个 rows_examined 的字段,表示这个语句执行过程中扫描了多少行。

这个值就是在执行器每次调用引擎获取数据行的时候累加的。

在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同的。

mysql数据库查询语句过程_mysql(一) SQL查询语句执行过程相关推荐

  1. MySQL数据库基础:安装+登入+SQL操作语句+数据库授权、备份、恢复+其他操作

    MySQL简介 MySQL最流行的RDBMS(关系型数据库系统),特别是在WEB应用方面,表现特点 数据以表格的形式出现 每行为各种记录名称 每列为记录名称所对应的数据域 许多的行和列组成一张表单 若 ...

  2. Mysql数据库基本操作(六)多表查询-内连接查询,外连接查询

    数据准备 use mydb3 ; --创建部门表 create table if not exists dept3 ( deptno varchar (20) primary key , --部门号 ...

  3. mysql数据库比对视频教程_MySQL数据库全学习实战视频教程(27讲 )

    一)mySQL数据库简介:MySQL属于关系型数据库,是当前最流行的关系型数据库管理系统之一,在WEB项目使用方面,MySQL是最好的 RDBMS应用软件. 二)本mySQL数据库视频教程目录如下:  ...

  4. 转载:MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解

    转自:http://www.jb51.net/article/39199.htm 本篇文章是对MySQL数据库INSERT.UPDATE.DELETE以及REPLACE语句的用法进行了详细的分析介绍, ...

  5. Mysql数据库基本操作(七)多表查询-子查询,表自身关联查询

    多表查询还有前面的两块内容--内连接查询,外连接查询,希望看到这篇博客的朋友先去看看我的"Mysql数据库"专栏中Mysql数据库基本操作(六)多表查询-内连接,外连接这一章博客, ...

  6. db2 mysql sql server_下文给大家介绍mysql数据库介绍,具体详情如下所示:MySQL数据库:Oracle、DB2、SQL Server、MySQL、access、mang...

    下文给大家介绍mysql数据库介绍,具体详情如下所示: MySQL 数据库: Oracle.DB2.SQL Server.MySQL.access.mangodb.bigtable 关系型数据库 大型 ...

  7. mysql 单表子查询语句_MySQL基本SQL查询语句:多表查询和子查询示例

    一.简单查询:基本语法: 代码如下 SELECT * FROM tb_name; 查询全部 代码如下 SELECT field1,field2 FROM tb_name; 投影 代码如下 SELECT ...

  8. mysql 查询语句属性值_MySQL学习——SQL查询语句(一)

    查询数据是指从数据库中获取所需要的数据,查询数据是数据库操作中最常用也是最重要的操作,用户可以根据对数据的需求,使用不同的查询方式,通过不同的查询方式可以获得不同的数据,在MySQL中使用select ...

  9. MySQL番外篇:一条SQL查询语句是如何执行的?

    在面试的过程中,有的面试官会给出一条简单的SQL查询语句,让简单说一下执行的过程. SELECT * FROM emp where age=30; 以下问MySQL的基本架构图,从中可以看出SQL语句 ...

最新文章

  1. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程
  2. 动漫风格迁移 AnimeGANv2 ,发布线上运行 Demo
  3. 先睹为快:Visual Studio 11测试版已于2.29在微软官方网站正式发布
  4. 纯CSS实现立方体旋转
  5. c语言比较麻烦的编程题,C语言编程题,比较简单
  6. html5块元素代码,html5 区块与内联div 与span html块级元素(示例代码)
  7. php 页面加载进度条,HTML5/CSS3 网页加载进度条的实现,下载进度条等经典案例
  8. 微机原理控制转移类指令
  9. 网页版blast构建
  10. 错误 undefined reference to __cxa_guard_acquire/release
  11. mysql 按照汉字的拼音排序、按照首字母分类
  12. 如何查看浏览器cookie?附2个方法
  13. 如何强制升级索尼sony tablet s android 4.0,【S丶Tablet】教你root Tablet S 4.0.3 R5
  14. 计算机功能室设备器材清单,办公用品清单
  15. 95后阿里P7晒出工资单:真的是狠狠扎心了...
  16. android webview播放视频黑屏
  17. PMI采购MogaFX经理人指数是什么(二)
  18. vsftp创建虚拟账户
  19. 【Qt学习】 一键生成函数注释
  20. 如何从Mysql快速查找一条数据

热门文章

  1. 漫谈软件研发特种部队之中的一个
  2. Linux mint 17中文输入法安装,改动linux mint与windows7双系统启动顺序
  3. as和强制类型转换的区别
  4. maven项目在打war包时出现非法字符: '\ufeff' 解决方案
  5. java时间日期工具类_java工具类--日期相关;
  6. python输入三行、能出来三行数据_python 读入多行数据的实例
  7. kafka maven没有下载_Kafka 系列(三)——Kafka 生产者详解
  8. android代码生成excel,AndroidExcel
  9. pdo-mysql_PHP: MySQL (PDO) - Manual
  10. ot协议是什么_OT的完整形式是什么?