首页 / 自学教程

MySQL的整体结构

发布时间:2023-11-20 09:19:56

从一个简单的sql语句讲起。

select * from test where id = 1

    这个sql语句是如何从数据库中查询相应的数据并返回给我们?下面我给出的是sql在执行过程中所经过的mysql的几大核心模块

    总体来说sqlserver分为两大部分,分为业务逻辑层和引擎层。

    其中业务逻辑层包含连接器、缓存、分析器、优化器、执行器等,大部分的核心功能(存储过程、视图),所有的内置函数也都在这一层。

    引擎层包含各种不同的执行引擎:myIsam 、innodb、memory等。目前默认的版本就是innodb引擎。不同的执行引擎数据的存取方式是不同的,后面再讲几个引擎的不同。

    下面介绍下业务逻辑层的几大组件.

连接器

    客户端连接进来后首先对接的就是连接器,连接器的功能就是跟客户端进行连接、权限验证。用户名密码通过后,就到权限表获取用户的权限。此后这个连接的权限都依赖于此时的获取的权限。

缓存

    每次执行查询sql之后,sql语句和结果会以 key-value 的形式缓存在内存中.因此当同一个请求再次来的时候会从缓存中取,来提高效率,但是这个机制已经在mysq8.0中删除了。

原因如下:

  • 当对这个表进行更新之后这个表中所有的缓存都已经失效了,因此很有可能这个缓存还没使用到就已经失效了,反而消耗cpu、内存而得不偿失。

  • 对于那些确实修改不多的表可以使用mybatis的缓存、或者是使用spring的@cacheable来把缓存前置。把缓存前置在服务中而不是数据库这一层

分析器

    首先对sql语句进行词法分析,识别出关键字。识别哪些字段代表列名哪些字段代表列数据。然后就是进行语法分析,分析这个sql是否有语法问题,如果有语法问题,就重点关注 use near 后的内容 

优化器

    经过分析器之后其实已经。其实mysql已经了解了你这个语法的内容,接下来就是确定查询的策略,优化器就是来确定查询的策略的。当一个表有多个索引时,优化器确定索引来执行查询。到此一个sql的执行策略已经确定。

执行器

    开始执行之前,打开表查找引擎的定义,调用引擎的相应接口。获取相应的数据。

 执行引擎

     不同的执行引擎有着不同的存取数据结构,后面会解析不同的执行引擎

相关推荐