接下来通过语句弄明白整个Select语句的内部运行状态:

连接器:

Mysql>mysql -uroot -p

你首先连接到这个数据库上;链接器负责跟客户端建立连接,获取权限,维持和管理连接

●如果密码不对,你会收到“access denied for user”,然后客户端程序执行结束

●如果密码认证通过,连接器会从权限表里查出你的权限;之后你所有的操作都依赖于此时得到的权限

连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,sleep表明其处于空闲状态

客户端如果太久没动静,链接器会自动断开,默认时间8小时;wait_timeout参数控制

如果,连接断开,客户端再次发送请求后,会收到一个错误:“lost connection to mysql server during query”;这时候,你需要重新连接,然后再执行请求;

查询缓存:

一个select语句,会先到查询缓存中看看,若是以前执行过,直接将查询结果返回给客户端,若是查询缓存没有命中,就需要执行后面的计划

分析器

如果没有命中查询缓存,就要开始分析器了;

mysql> select sql_cache * from T where ID=10;

词法分析:比如,T识别为表,select识别为查询,ID识别为字段

语句分析:语法不对,会报错(5.5.5与8.0语法有些许不同)

优化器

经过分析器,mysql知道你要干什么了,在开始执行前,还要经过优化器的处理

优化器:在表里有多个索引的时候,决定使用哪个索引;在一个表里有多表关联时,决定各表的连接顺序;

很多时候,两种执行方法的逻辑结果是一样的,但是执行效率会有不同,而优化器就是决定选择哪个方案;

执行器

mysql> select sql_cache * from T where ID=10;

Mysql通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是进行了执行器阶段;

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

“select command denied to user “”,for table T ”

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

    ●调用innodb引擎接口取这个表的第一行,遍历所有的判断字段,如果满足,就将查询结果存在结果集

      你可以在rows_examined的字段,表示这个语句执行过程中扫描了多少行,这个值是累加的;

…………………………………………………………………………………………………………………………………………

内容来自于林晓斌老师《mysql实战45讲》

mysql中,一条select语句是如何执行的?相关推荐

  1. mysql中一条SQLupdate语句是如何执行的?redo log 与binlog

    mysql> create table T(id int primary key,c int); mysql> update T set c=c+1 where id=2; 大体流程与查询 ...

  2. 【MySQL专题】MySQL中一条SQL是如何被执行的?---来自于令狐的独孤九剑

    [MySQL专题]MySQL中一条SQL是如何被执行的? 前言 ​ 大家好,我是令狐,欢迎来到令狐的独孤九剑**[MySQL专题]**这节课跟大家聊一聊MySQL中一条SQL是如何被执行的. MySQ ...

  3. 执行计划 分析一条sql语句的效率 mysql_MySQL中一条SQL语句的执行过程

    MySQL中一条SQL语句的执行过程 发布时间:2018-11-24 18:35, 浏览次数:390 , 标签: MySQL SQL 查询语句的执行顺序: 1.客户端通过TCP连接发送连接请求到mys ...

  4. MySQL进阶查询(SELECT 语句高级用法)

    文章目录 MySQL进阶查询 1.1按关键字排序 1.2对结果进行分组 1.3限制结果条目 1.4设置别名 1.5通配符 1.6子查询 1.7NULL值 1.8正则表达式 1.9运算符 1.10连接查 ...

  5. MySQL实战 | 01 当执行一条 select 语句时,MySQL 到底做了啥?

    原文链接:当执行一条 select 语句时,MySQL 到底做了啥? 也许,你也跟我一样,在遇到数据库问题时,总时茫然失措,想重启解决问题,又怕导致数据丢失,更怕重启失败,影响业务. 就算重启成功了, ...

  6. 在MySQL中,一条查询语句是如何执行的

    MySQL 基本架构示意图 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分: Server 层 包括连接器.查询缓存.分析器.优化器.执行器等,涵盖 MySQL 的大多数核心服务功 ...

  7. mysql load会锁表吗_Mysql必读MySQL中由load data语句引起死锁的解决案例

    <MysqL必读MysqL中由load data语句引起死锁的解决案例>要点: 本文介绍了MysqL必读MysqL中由load data语句引起死锁的解决案例,希望对您有用.如果有疑问,可 ...

  8. mysql 查询语句_MySQL相关(一)- 一条查询语句是如何执行的

    前言 学习一个新知识最好的方式就是上官网,所以我先把官网贴出来 MySQL官网 (点击查阅),如果大家有想了解我没有说到的东西可以直接上官网看哈~目前 MySQL 最新大版本为8.0,但是鉴于目前应用 ...

  9. mysql+inser+select_解析MySQL中INSERT INTO SELECT的使用

    1. 语法介绍 有三张表a.b.c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段.对于这种情况,可以使用如下的语句来实现: INSERT INTO db1_name (field1, ...

最新文章

  1. python 操作redis之——有序集合(sorted set) (七)
  2. CSS三种写法的优先级
  3. java gui 移动_JavaGUI如图:当鼠标按left按钮,右边的字会移动到左边按 爱问知识人...
  4. axios请求本地的json文件在打包部署到子目录域名下,路径找不到
  5. 对象工厂PHP,php – 域对象工厂是什么样的?
  6. java中ArrayList用法详解,基本用法(含增删改查)
  7. linux配置路径,Linux下配置搜索路径
  8. MySQL索引结构--由 B-/B+树看
  9. android 蓝牙通讯测试工具,Android Bluetooth 学习(2)应用层实现蓝牙设备查找、tcp_ip通信...
  10. Firefox国际版上登录本地服务
  11. HUAWEI 机试题:VLAN资源池
  12. 与众不同的协同办公工具——飞书
  13. 吃饭,睡觉,打豆豆任务二
  14. 深度学习为图片人物换装【python代码教程】 1
  15. 机器学习在脊柱的应用现状:从临床的观点
  16. 分数阶微分方程c语言,第一讲分数阶微分方程.PDF
  17. 傅里叶变换(真正的通俗易懂)
  18. 低学历逆袭难,真的只是不够努力吗?
  19. 重新排列数组[数组] 给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。请你将数组按 [x1,y1,x2,y2,...,x
  20. 计算机没去考 禁考一年,自考报名不去考会禁考吗 弃考有什么影响

热门文章

  1. 剑指 Offer 31. 栈的压入、弹出序列【无取巧,易于理解!】
  2. 【最详细解析+难点分析】1085 PAT单位排行 (25分)
  3. 12行代码AC——L1-058 6翻了(15分)
  4. 17行代码AC——L1-030 一帮一 (15分)(解题报告)
  5. 【已解决】navigateTo:fail page “/pages/.../...“ is not found
  6. Mybatis逆向生成报错:文档根元素 “project“ 必须匹配 DOCTYPE 根 “null“。
  7. OBD技术速成——J1850协议概述
  8. 海南2021高考成绩分数查询时间,2021海南高考成绩查询公布时间今天几点可以查询...
  9. linux环境没有bzip2,Linux系统中安装使用Bzip2来压缩文件的方法讲解
  10. bean 属性设置默认值_activiti7源码分析之引擎初始化与Bean注入