文章目录

  • 1 一条SQL查询语句是如何执行的
  • 2 mysql体系结构
  • 3 InnoDB存储引擎
  • 4 总结

1 一条SQL查询语句是如何执行的

​ 通常我们使用数据库,都是将数据库看成一个整体,我们的应用与数据库完全就是通过SQL语句进行交互。大多数开发者很少去了解数据库的内部实现原理,这样也可以完成我们的应用。但是如果遇到一些疑难问题,如查询变慢、死锁、数据库宕机需要恢复数据时,我们就需要对数据库的实现原理有一定的了解,才能解决这些问题。了解一个东西,先鸟瞰其全貌,再一步步深入到内部。

​ 想要了解mysql的基础架构,从最简单的SQL查询语句来分析,当了解了mysql是如何执行一条SQL查询语句后,就基本了解了mysql的基础体系结构。

​ 下面是一条最简单的SQL查询语句:

select * from T where id = 2;

​ 对于应用开发者来说,看到的就是输入一条语句,返回一个结果。下面是mysql的基本架构简单示意图,这条语句会经过这些过程。

​ 大体来说,mysql可以分为server层和存储引擎层。

  • server层包括
  1. 连接器:连接器负责跟客户端建立连接、获取权限、维持和管理连接等。

  2. 查询缓存:建立连接后就应该进行数据的查询。在真正进行数据查询之前,mysql会先到缓存查看,之前是否执行过这条语句,如果执行过,会在缓存中缓存这条查询对应的返回数据,此时可以直接从缓存中获取。如果不在缓存中,则继续后面的流程。

    2.1 大多数情况下不建议使用查询缓存的功能,因为查询缓存弊大于利。查询缓存失效非常频繁,只要有对表的更新操作,这个表上所有的查询缓存就会被清空,因此很有肯能你很费劲地把结果存起来,还没使用就被一个更新操作清空了。对于更新压力大的数据库来说,查询缓存的命中率非常低。mysql8.0以后直接将查询缓存的功能删掉了。

  3. 分析器:如果没有命中缓存,就开始这正的执行查询了。mysql首先会需要对你提交的SQL语句进行校验与分析,看是否是正确的SQL语句。分析器主要包括词法分析、语法分析,后面的文章会对其进行详细的分析。

  4. 优化器:当SQL语句校验成功,没有语法错误,会进行优化器优化,优化器主要是在表里有多个索引的时候决定使用哪个索引,或者在一个语句有多表关联(jion)的时候,决定各个表的连接顺序。

  5. 执行器:mysql通过分析器知道了要做什么,通过优化器知道了要怎么做。于是就进入了执行阶段,开始执行语句。

    1. 执行的开始会先判断你对这个表是否有权限。
    2. 如果有权限则打开表继续执行,执行器会根据表的存储引擎的定义,来调用不同存储引擎的api接口,查询具体的数据。

​ 上面就是一条SQL查询语句的简单执行过程,只是加单的描述了大概的流程,当然里面的细节非常负责,这在后面的文章中会进行一一拆解。

2 mysql体系结构

​ 在了解了上面的一条SQL查询语句的执行流程后,我们再来看下,mysql完整的体系结构是什么样。

​ 从以上mysql的体系结构中可以看出,主要有以下几个部分组成。

  • 连接池组件
  • 管理服务和工具组件
  • SQL接口组件
  • 查询分析器组件
  • 优化器组件
  • 缓冲组件插件式存储引擎
  • 物理文件

​ mysql数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。mysq插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都需要的,如SQL分析器和优化器。存储引擎是底层物理结构的实现,每个存储引擎开发者可以按照自己的意愿来进行开发。

​ 需要特别注意的是,存储引擎是基于表的,而非数据库的。我们最好牢记上面的mysql体系结构,对我们后面深入理解mysql数据库有很大的帮助。

3 InnoDB存储引擎

​ 我们已经大致了解了mysql数据库独有的插件式体系结构,病了解到存储引擎是mysql数据库区别于其他数据库的一个最重要的特性。存储引擎的好处是,每个存储引擎都有各自的特点,能够根据具体的应用建立不同的存储引擎表。我们业务应用开发平时所说的事务、锁、B+树索引等,也都是在存储引擎层实现的。其中InnoDB存储引擎是目前最常用的一种存储引擎,所以我们总是围绕着InnoDB的原理进行讲解。

​ InnoDB存储引擎支持事务,其设计的主要目标是面向在线事务处理的应用(OLTP),其特点是行锁设计、支持外键、并通过使用多版本并发控制支持一致性非锁定读。并且实现了SQL的四种隔离级别。默认为RR(REPEATABLE READ)隔离级别,同时使用next-key locking 的策略来避免幻读(phantom)现象的产生。除此之外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引、预读(read ahead)等高性能和高可用的功能。

​ 对于标准红数据的存储,InnoDB采用聚集(clustered)的方式,因此每张表的存储都是按照主键的顺序进行存放。

4 总结

​ 本文是接下来对mysql数据库拆解,并深入分析的基础,我们主要掌握mysql体系结构的图,把上面的图背下来也行,对后面理解索引、锁、以及mysql优化都有莫大的好处。

【mysql技术内幕1】mysql基础架构-一条SQL查询语句是如何执行的相关推荐

  1. 怎么做mysql查询系统_mysql数据库系统学习(一)---一条SQL查询语句是如何执行的?...

    一.第一节:一条sql查询语句是怎样执行的 5.5.5版本以后,默认使用存储引擎为InnoDB 不使用查询缓存,MySQL8.0没有查询缓存这个功能 总体来说:MySQL分为service层和存储引擎 ...

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

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

  3. 一条SQL查询语句是如何执行的? MySql杂谈

    在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不 ...

  4. 01 | 基础架构:一条 SQL 查询语句是如何执行的

    1. MySQL整体架构预览   MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL的各个功能模块中的执行过程.   大体来说,MySQL 可以分为 Server 层和存储 ...

  5. 【MySQL原理解析】01. 一条SQL查询语句是如何执行的

    这是[MySQL原理解析]的第一篇文章,MySQL我看了很多的书与教程,对其原理有一定的理解,一直想写一系列的文章来把MySQL的原理给讲清楚,一直没有时间写,今天算是个开头吧.万事开头难,咱们先破了 ...

  6. 01 | 基础架构:一条SQL查询语句是如何执行的?笔记(转)

    连接器 第一步,你会先连接到这个数据库上,这时候接待你的就是连接器.连接器负责跟客户端建立连接.获取权限.维持和管理连接.连接命令一般是这么写的: mysql -h$ip -P$port -u$use ...

  7. MySQL基础架构:一条SQL“查询语句”是如何执行的

    0. MySQL的基础架构图: (图片来自极客时间:https://time.geekbang.org/column/article/68319) 大体来说,MySQL可以分为Server层(服务器层 ...

  8. mysql查询前几笔sql语句_mysql开发常用的几条sql查询语句

    mysql开发常用的几条sql查询语句 有需要的朋友可参考一上. 1.计算年龄 如果你有一个人的生日而需要计算这个人的年龄,将下列语句中@dateofbirth替换为生日即可 代码如下 SELECT ...

  9. 讲mysql执行流程书籍_MySQL 基础架构 1. 一条SQL查询语句的执行过程(个人学习笔记)...

    MySQL的逻辑架构图: MySQL 大体分为 "server 层" 和 "存储引擎层" 两部分: Server 层 包括 连接器.查询缓存.分析器.优化器.执 ...

最新文章

  1. Java项目:前后端分离疫情防疫平台设计和实现(java+springmvc+VUE+node.js+mybatis+mysql+springboot+redis+jsp)
  2. spring boot项目之mybatis注解方式的使用
  3. android studio怎么回退,如何回滚已经commit的代码(Android Studio)
  4. 使用MultipartFile实现文件上传_SpringMVC
  5. wordcloud里面设置mask加载不出来词频_一条龙搞定情感分析:文本预处理、加载词向量、搭建RNN
  6. 软工网络15个人作业
  7. ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
  8. 日期 时间差 java_Java8中计算日期时间差
  9. iOS 9键盘类型合集
  10. Windows10设置动态桌面壁纸
  11. 腾讯qlv格式转换mp4为何转换后只有音频
  12. 【华为机考题库学习】--算法篇(更新中……)
  13. 在线公网安备案保姆级教程【伸手党福利】
  14. Educational Codeforces Round 63 (Rated for Div. 2) -E
  15. win8 网络 连接计算机名称,成熟的解决方案:Win8系统计算机的解决方案无法连接到WiFi无线网络...
  16. jshell(jshell打不了汉字)
  17. Ableton Live 10 Sound Packs 97GB 工程音色组件拓展素材包
  18. 如何在MathType输入空格 MathType常见问题
  19. Oracle去重函数distinct
  20. 设计模式之略见一斑(外观模式Facade)

热门文章

  1. spring mvc学习(16)Could not publish server configuration for Tomcat v8.0 Server at localhost.
  2. java学习(77):GUL下拉菜单框和滚动条
  3. docker Registry镜像仓库
  4. linux下源码安装nginx
  5. mysql独有的函数_数据库之MySQL函数(一)
  6. case mybatis 不同表_解决mybatis case when 报错的问题
  7. Centos7静态ip设置(亲测有效)
  8. python enumerate()
  9. 元组、字典、集合的常用方法
  10. 探索未知种族之osg类生物---呼吸分解之更新循环一