总体流程

客户端发送一条查询给服务器;

服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段;

服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划;

MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询;

将结果返回给客户端。

MySQL客户端/服务器通信协议

1.MySQL客户端和服务器之间的通信协议是“半双工”:在任何一个时刻,要么由服务器向客户端发送数据,要么由客户端向服务器发送数据。这也就意味着没法进行流量控制。

在任何时刻,只有一个人能控制球,而且只有控制球的人才能将球抛出去。

2.多数连接MySQL的库函数都可以获取全部结果集并缓存到内存里,还可以逐行获取需要的数据。默认一般是获取全部结果集并缓存到内存中。MySQL通常需要等所有的数据都发送给客户端才能释放这条查询所占用的资源。

查询缓存

在解析一个查询语句之前,如果查询缓存是打开的,那么MySQL会优先检查这个查询是否命中查询缓存中的数据。

查询优化处理

查询的生命周期的下一步是将一个SQL转换成一个执行计划,MySQL再依照执行计划和存储引擎进行交互。包括多个子阶段:解析SQL、预处理、优化SQL执行计划。

MySQL执行关联查询

查询策略:MySQL对任何关联都执行嵌套循环关联操作,即MySQL会在一个表中循环取出单挑数据,然后再嵌套循环到下一个表中寻找匹配的行,依次下去,直到找到所有表中匹配的行为为止。然后根据各个表匹配的行,返回查询中需要的各个列。(类似for循环嵌套)

MySQL多表关联(左侧深度优先树)

mysql 执行查询_MySQL执行一个查询的过程相关推荐

  1. mysql桦仔_带您理解SQLSERVER是如何执行一个查询的

    带您理解SQLSERVER是如何执行一个查询的 看这篇文章之前,阁下可以先看一下下面的文章 翻译自: 不知道是哪篇文章抄哪篇文章的 ,不管他了,我也偷他们的文章,嘎嘎嘎嘎嘎... 我将会用尽本人的所有 ...

  2. mysql执行的list_CMD如何进入Mysql命令并执行相关查询

    这篇文章主要分享Windows下cmd如何进入mysql命令并执行相关查询,这里我们以查询数据库连接数为例,并且mysql安装在C盘根目录,步骤如下: 一.运行-打开CMD,输入c:\mysql\my ...

  3. mysql 执行查询_MySQL查询的执行过程

    我们总是希望MySQL能够获得更高的查询性能,最好的办法是弄清楚MySQL是如何优化和执行查询的.一旦理解了这一点,就会发现:很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的 ...

  4. IDEA连接MySQL数据库并执行SQL查询操作

    打开IDEA后,新建一个项目或者在已有项目上均可操作!!! 1 打开数据库页面 1.1 方式一 在主页面工具栏上找到View(视图)-Tool Windows(工具窗口)-Database(数据库), ...

  5. mysql 命令先执行子查询,MySQL必知必会--使用子查询

    子查询 版本要求 MySQL 4.1引入了对子查询的支持,所以要想使用 本章描述的SQL,必须使用MySQL 4.1或更高级的版本. SELECT语句 是SQL的查询.迄今为止我们所看到的所有 SEL ...

  6. php mysql 家谱_mysql家谱表查询某人所有后代

    我们经常会把一些树形的结构放在一张表里,例如家谱,菜单等.这种表最大的问题就是当我们需要查询某个记录的所有子记录时,很难用简单的sql搞定.我们可以专门写个过程来做这种事情,下面是我写的一个例子.fg ...

  7. php 拼接mysql 语句_MySQL执行拼接字符串语句实例

    -- 以下是一个MySQL执行拼接字符串语句实例:-- 为需要拼接的变量赋值SET @VARNAME= -- 以下是一个MySQL执行拼接字符串语句实例: -- 为需要拼接的变量赋值 SET @VAR ...

  8. MySQL充电_Mysql 充电站SQL查询1--171221--mysql-sql

    Mysql 充电站SQL查询1--171221--mysql-sql --当月至现在查询支付成功后未成功充电的情况 select c.a 失败数,c.b 总数,c.a1,c.cs 失败率,c.cc 成 ...

  9. mysql执行计划字段解析_MySQL执行计划解析

    前言 在实际数据库项目开发中,由于我们不知道实际查询时数据库里发生了什么,也不知道数据库是如何扫描表.如何使用索引的,因此,我们能感知到的就只有SQL语句的执行时间.尤其在数据规模比较大的场景下,如何 ...

  10. explain ref_用 Explain 命令分析 MySQL 的 SQL 执行

    在上一篇文章<MySQL常见加锁场景分析>中,我们聊到行锁是加在索引上的,但是复杂的 SQL 往往包含多个条件,涉及多个索引,找出 SQL 执行时使用了哪些索引对分析加锁场景至关重要. 比 ...

最新文章

  1. 一对多查询,合并成一条数据
  2. 抗震求灾捐款,我们公司总额为:14222
  3. linux基本指令chmod,Linux 常用命令
  4. [机器学习-sklearn]K-means之make_blobs聚类数据生成器
  5. tomcat启动后访问404_伪Tomcat
  6. 站立会议03--个人总结
  7. 机器学习基础(四十七)—— 统计
  8. easymock接口模拟_EasyMock部分模拟
  9. java valid payload_Spring Validation最佳实践及其实现原理,参数校验没那么简单!
  10. 复制xml导致乱码问题解决。
  11. R语言初级教程(01): R编程环境的搭建
  12. 毕业设计 - 题目: 基于深度学习的疲劳驾驶检测 深度学习
  13. 先手获胜逻辑题_宣布障碍塔挑战赛的获胜者和开源版本
  14. python构造自定义数据包_Python发送网络封包,自定义封包结构与内容并发出去
  15. 奈何心是安定心,命总是流浪命
  16. 修真院教学模式四大体系之技能体系
  17. 查看core dumped的详细错误原因
  18. 关于WIN7输入法的小问题
  19. 获取分辨率函数是什么_使用深度学习来实现超分辨率的介绍
  20. -nan(ind) 重载运算符以及结构体排序

热门文章

  1. apache+tomcat+jk配置负载均衡
  2. 卷积神经网络(TextCNN)在句子分类上的实现
  3. 入门python之前,应该先了解这些
  4. java B2B2C 源码 多级分销Springcloud多租户电子商城系统-SpringCloud配置中心内容加密...
  5. 使用docker分离服务与数据库
  6. 目前M院M师的教学乱象
  7. IOS之UI--自定义按钮实现代理监听点击事件
  8. iOS.Debug.Simulator
  9. 【转】oracle order by 处理NULL 值
  10. [翻译] REST API必须是超文本驱动的