1 sql语句示例

 select *from A where id=1

2 mysql基本架构图

(1)Mysql分为Server层和引擎层两个部分

(2)Server层包括连接器,查询缓存,分析器,优化器等,其功能包含了大部分内置函数(日期,时间等)。

(3)存储引擎默认使用InnoDB。其所有组件的基本架构图如下所示

3 Server层相关组件原理

  • 执行逻辑第一步连接器

   (1) 首先连接数据库,连接器负责与客户端建立连接,获取相关权限和管理这个连接。认证你的身份就是输入用户名和密码,如果不对,会返回没有权限,如果用户名

密码正确,就会从权限表中取出相应用户的权限。

通过命令显示当前的连接数,以及哪些是空闲连接(也就是字段为sleep的。那么如果客户端长时间保持连接但是没有什么其他的操作,连接器会自动的将其断开,默认8小时。配置文件中的wait_timeout

(2)长连接与短链接

      长连接:客户端连接上以后,客户端保持请求,一直的使用这个连接。------>内存占用率高,导致OOM(系统杀死进程),采取的措施

         定期断开连接。

          mysql5.7以后的版本,当执行完一次操作时间比较长的任务时,可以通过mysql_reset_connect重新的初始化连接的资源。

短链接:   客户端连接以后,操作一小会就断开,下次操作再连。

  • 执行逻辑第二步查询缓存

    (1) 查询缓存原理

               当连接成功以后,比如咱们使用select查询,首先去缓存查看,缓存中是按照key-value的方式存储,key为执行的操作方法,value为执行操作后的结果,如果命中,直接返回查询

     查询结果。

     (2) 为什么不要使用查询缓存?

         因为查询缓存的失败率很高,因为只要一个表更新,这个表所有的查询缓存就会清空。mysql5.7提供了参数去掉查询缓存,参数query_cache_type=DEMAND.mysql5.8

没有了缓存查询模块。

  • 执行逻辑第三步分析器

    (1)分析器步骤

        分析器先做词法分析,比如通过"select"得知道是查询,"A"是表等。-------->语法分析,也就是看是否满足mysql语法,一般错误会提示第一个出现错误的位置。

  • 执行逻辑优化器

      经过了分析器大概知道了想做什么,那么优化器是从多种方案中选择一种更好(效率)。一旦优化得阶段确定,那么执行方案就确定了

  • 执行逻辑执行器

     (1)确认权限

        先判断是否有权限对表进行相关操作,没有则报错。如果有权限,那么执行器会根据表得引擎定义,使用引擎提供的接口。

      (2)执行器执行流程------比如最开始的创建的A表

        调用引擎取表第一行,判断ID是否为1,如果是1存在结果集,不是则跳过

         调用殷勤处理第二行,重复相同的逻辑

        综合所有结果集和返回给客户端。

4 总结

  学习了一个简单的select操作都经历哪几个步骤,每个步骤的具体作用是做什么,以及相关组件的优点缺点。

mysql笔记7--一句查询语句的过程的更多相关文章

  1. MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图

    http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...

  2. MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介

    网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...

  3. MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)

    在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:

  4. [转]MySQL查询语句执行过程详解

    Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...

  5. Mysql查询语句执行过程

    Mysql查询语句执行过程   Mysql分为server层和存储引擎两部分,或许可以再加一层连接层   连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注 ...

  6. 高性能MySQL笔记 第6章 查询性能优化

    6.1 为什么查询速度会慢   查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...

  7. Mysql补充部分:SQL逻辑查询语句执行顺序

    一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...

  8. mysql常用内置函数-查询语句中不能使用strtotime()函数!

    来自:http://yushine.iteye.com/blog/775407 FROM_UNIXTIME把 unix时间戳转换为标准时间 unix_timestamp把标准时间转换为 unix时间戳 ...

  9. MySQL指定使用某个索引查询语句

    查询语句查询emp_no,所以先查询emp_no的索引使用primary select emp_no,salary from salaries use index(s_f_t) where emp_n ...

随机推荐

  1. BlocksKit block从配角到主角—oc通往函数式编程之路--oc rx化?

    BlocksKit 对 oc语言的功能层.UI层进行了大量的适配,使得oc能够复合函数式编程的风格: 是oc语言的函数式编程风格改造: 将函数式风格的BlocksKit API解释为原生的功能调用: ...

  2. js编程思想:模型进化论--JS 的 new 到底是干什么的?

    想象我们在制作一个策略类战争游戏,玩家可以操作一堆士兵攻击敌方. 我们着重来研究一下这个游戏里面的「制造士兵」环节. 一个士兵的在计算机里就是一堆属性,如下图: 一.荒蛮时代:对象是数据的集合 我们只 ...

  3. Mophues HDU - 4746 (莫比乌斯反演)

    Mophues \[ Time Limit: 10000 ms\quad Memory Limit: 262144 kB \] 题意 求出满足 \(gcd\left(a,b\right) = k\), ...

  4. 【BZOJ1095】【ZJOI2007】捉迷藏

    前言 好恶心的一道题,代码写了2.5h,调试调了5h+,局部重构了n遍. 题意 一棵树上的节点有黑白两色,初始为黑,支持修改颜色,查询最远黑点对.$n<=10^5,m<=5*10^5$ 题 ...

  5. kafka消费端提交offset的方式

    Kafka 提供了 3 种提交 offset 的方式 自动提交 复制 1234 consumer.commitSync(); 手动异步提交 offset 复制 1 consumer.commitAsy ...

  6. 高考数学答卷策略[K12论坛转载]

    一.试卷上给你的启发 1.试卷上有参考公式,80%是有用的,它为你的解题指引了方向: 2.解答题的各小问之间有一种阶梯关系,通常后面的问要使用前问的结论.如果前问是证明,即使不会证明结论,该结论在后问 ...

  7. uni-app 事件以及事件绑定

    事件修饰符stop的使用会阻止冒泡,但是同时绑定了一个非冒泡的事件,会导致该元素上的catchEventName失效! prevent可以直接干掉,因为uni-app里没有什么默认事件,比如submi ...

  8. linux高性能服务器编程 (六) --高级I/O函数

    第六章 高级I/O函数 Linux提供了很多高级的I/O函数,它不是基础的I/O函数(open/read) 1.创建文件描述符的函数比如:pipe.dup/dup2函数 2.读写数据的函数比如:rea ...

  9. npx 使用教程

    转自阮一峰http://www.ruanyifeng.com/blog/2019/02/npx.html npm 从5.2版开始,增加了 npx 命令.它有很多用处,本文介绍该命令的主要使用场景. N ...

  10. Optional int parameter 'resourceState' is present but cannot be translated into a null value

    错误日志: java.lang.IllegalStateException: Optional int parameter 'resourceState' is present but cannot ...