查询语句在mysql的底层实现

0.说明

某次组会分享的内容:mysql查询语句的底层执行mysql

1.mysql的逻辑结构

  • 客户端主要指的是链接mysql的应用,主要包括 Navicat 系统 命令行等等;
  • server层是mysql的核心部分;
  • 存储引擎层 主要是底层数据存取操做的实现部分,由多个存储引擎组成,他们负责存储和获取全部存储在mysql中的数据。

2.不一样客户端链接数据库

3.链接器在链接过程当中作了什么?

链接器接收到客户端的链接请求响应主要包括5个步骤:算法

  • 客户端发送链接请求
  • 链接器接收并建立链接对象
  • 链接器去系统数据库load user的权限
  • 把user的权限加载到链接对象
  • 链接器返回链接对象给客户端

4.若是客户端链接成功并得到链接对象,中途修改user表的权限,链接对象的权限是否受影响?

5.一条语句的执行过程-语法分析器

MySQL 从你输入的"select"这个关键字识别出来,这是一个查询语句。它也要把字符 串“T”识别成“表名 T”,把字符串“ID”识别成“列 ID”。 作完了这些识别之后,就要作“语法分析”。根据词法分析的结果,语法分析器会根据语法 规则,判断你输入的这个 SQL 语句是否知足 MySQL 语法。sql

6.一条语句的执行过程-语义检查

7.一条语句的执行过程-优化器

其中,逻辑查询优化将生成逻辑查询执行计划。根据关系代数的原理,把语法分析树变为关系代数语法树的样式,原先SQL语义中的一些谓词变化为逻辑代数的操做符等样式
这些样式是一个临时的中间状态,通过进一步的逻辑查询优化,如执行常量传递、选择下推等(如一些节点下移,一些节点上移),从而生成逻辑查询执行计划。数据库

物理查询优化除了进行表的链接顺序调整外,还会使用代价估算模型对单个表的扫描方式、两表链接的链接算法进行评估,选择每一项操做中代价最小的操做为下一步优化的基础。物理查询优化的最终结果是生成最终物理查询执行计划。缓存

8.一条语句的执行过程-执行器

mysql的存储引擎 是按照插件的形式,提供一个接口给server层去用,这样的一个好处是,在执行器调用引擎接口的时候,咱们能够动态的扩展数据库存储引擎或者是动态组合存储引擎,可扩展性比较高。优化

9.一条语句的执行过程-存储引擎

10.一条语句的执行过程-缓存区

若是中途没有update或者insert操做,是第二次查询的话,会直接去缓存区读取这个结果。避免了磁盘IO,大大提升了数据库处理查询的能力。插件

可是若是中途有update或者insert操做。在一个表上有更新的时候,跟这个表有关的查询缓存会失效,若是是写多读少的应用场景的话,效率比较慢。这也就是咱们通常不建议使用查询缓存的缘由命令行

query_cache_type=0时表示关闭,1时表示打开,2表示只要select中明确指定SQL_CACHE才缓存。3d

查看缓存运行状态 :好比你想执行某个查询以前,你能够查看缓存运行状态cdn

11.分享一张mysql生态图

12.总结

  • 关系代数、查询优化、代价估算模型等等内容对于mysql的优化器部分理解是很是有用的
  • 关于update及delete语句还有关于binlog以及redo log的部分须要探索
相关文章
相关标签/搜索