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操作都经历哪几个步骤,每个步骤的具体作用是做什么,以及相关组件的优点缺点。

最新文章

  1. 路由的Resolve机制(需要了解promise)
  2. 从零开始编写自己的C#框架(24)——测试
  3. gulp压缩css文件跟js文件
  4. js 时间与时间戳的转换
  5. solr与.net系列课程(五)solrnet的使用
  6. 哪些字符需要urlencode编码?具体怎么处理?
  7. 【POJ】【1821】Fence
  8. c函数习记
  9. Android 使用加速度传感器实现摇一摇功能及优化
  10. 利用System.Net.Mail和多线程实现邮件发送
  11. 【剑指offer】面试题26:复杂链表的复制
  12. Thinkphp交友手机首页简明前台、后台
  13. admin的基础配置
  14. PhoenixFD插件流体模拟——UI布局【Dynamics】详解
  15. Noj - 在线强化训练2
  16. NGS NGS ngs(hisat,stringtie,ballgown)
  17. redis-scala链接redis集群
  18. slot 插槽的作用域用法(摘自vue.js 官网)
  19. java中常用jar包
  20. 学习笔记58—3D杯子设计

热门文章

  1. 2019 NOIP 夏令营(模拟赛1)
  2. JDBC-select练习&jdbc工具类&数据库登录案例
  3. 使用 Python 和 Flask 设计 RESTful API
  4. 是什么让我走上Java之路?
  5. 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)
  6. Python快速入门教程【转】
  7. gcc 编译两个so其中soA依赖soB
  8. 解决SQL Server 阻止了对组件Ad Hoc Distributed Queries访问的方法
  9. webService和Restful
  10. 【GMT43智能液晶模块】例程二十二:USB_HID实验——双向数据传输