网站增加用户体验,企业网站建设公司怎么收费,怎么推广平台,发稿渠道文章目录1 一条SQL查询语句是如何执行的2 mysql体系结构3 InnoDB存储引擎4 总结1 一条SQL查询语句是如何执行的
通常我们使用数据库#xff0c;都是将数据库看成一个整体#xff0c;我们的应用与数据库完全就是通过SQL语句进行交互。大多数开发者很少去了解数据库的内部实…
文章目录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层包括 连接器连接器负责跟客户端建立连接、获取权限、维持和管理连接等。 查询缓存建立连接后就应该进行数据的查询。在真正进行数据查询之前mysql会先到缓存查看之前是否执行过这条语句如果执行过会在缓存中缓存这条查询对应的返回数据此时可以直接从缓存中获取。如果不在缓存中则继续后面的流程。 2.1 大多数情况下不建议使用查询缓存的功能因为查询缓存弊大于利。查询缓存失效非常频繁只要有对表的更新操作这个表上所有的查询缓存就会被清空因此很有肯能你很费劲地把结果存起来还没使用就被一个更新操作清空了。对于更新压力大的数据库来说查询缓存的命中率非常低。mysql8.0以后直接将查询缓存的功能删掉了。 分析器如果没有命中缓存就开始这正的执行查询了。mysql首先会需要对你提交的SQL语句进行校验与分析看是否是正确的SQL语句。分析器主要包括词法分析、语法分析后面的文章会对其进行详细的分析。 优化器当SQL语句校验成功没有语法错误会进行优化器优化优化器主要是在表里有多个索引的时候决定使用哪个索引或者在一个语句有多表关联jion的时候决定各个表的连接顺序。 执行器mysql通过分析器知道了要做什么通过优化器知道了要怎么做。于是就进入了执行阶段开始执行语句。 执行的开始会先判断你对这个表是否有权限。如果有权限则打开表继续执行执行器会根据表的存储引擎的定义来调用不同存储引擎的api接口查询具体的数据。
上面就是一条SQL查询语句的简单执行过程只是加单的描述了大概的流程当然里面的细节非常负责这在后面的文章中会进行一一拆解。
2 mysql体系结构
在了解了上面的一条SQL查询语句的执行流程后我们再来看下mysql完整的体系结构是什么样。 从以上mysql的体系结构中可以看出主要有以下几个部分组成。
连接池组件管理服务和工具组件SQL接口组件查询分析器组件优化器组件缓冲组件插件式存储引擎物理文件
mysql数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。mysq插件式的存储引擎架构提供了一系列标准的管理和服务支持这些标准与存储引擎本身无关可能是每个数据库系统本身都需要的如SQL分析器和优化器。存储引擎是底层物理结构的实现每个存储引擎开发者可以按照自己的意愿来进行开发。
需要特别注意的是存储引擎是基于表的而非数据库的。我们最好牢记上面的mysql体系结构对我们后面深入理解mysql数据库有很大的帮助。
3 InnoDB存储引擎
我们已经大致了解了mysql数据库独有的插件式体系结构病了解到存储引擎是mysql数据库区别于其他数据库的一个最重要的特性。存储引擎的好处是每个存储引擎都有各自的特点能够根据具体的应用建立不同的存储引擎表。我们业务应用开发平时所说的事务、锁、B树索引等也都是在存储引擎层实现的。其中InnoDB存储引擎是目前最常用的一种存储引擎所以我们总是围绕着InnoDB的原理进行讲解。
InnoDB存储引擎支持事务其设计的主要目标是面向在线事务处理的应用OLTP其特点是行锁设计、支持外键、并通过使用多版本并发控制支持一致性非锁定读。并且实现了SQL的四种隔离级别。默认为RRREPEATABLE READ隔离级别同时使用next-key locking 的策略来避免幻读phantom现象的产生。除此之外InnoDB存储引擎还提供了插入缓冲insert buffer、二次写double write、自适应哈希索引、预读read ahead等高性能和高可用的功能。
对于标准红数据的存储InnoDB采用聚集clustered的方式因此每张表的存储都是按照主键的顺序进行存放。
4 总结
本文是接下来对mysql数据库拆解并深入分析的基础我们主要掌握mysql体系结构的图把上面的图背下来也行对后面理解索引、锁、以及mysql优化都有莫大的好处。